链式存储方式
#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
struct node //定义结构体
{
int data;
struct node * next;
};
//逆置链表
struct node *revercelink(struct node *head)
{
struct node *p, *q, *r;
r=p=head;
q=p->next;
p->next=NULL;
while(q!=NULL)
{
p=q;
q=q->next;
p->next=r;
r=p;
}
return p;
}
//创建链表
struct node *createlink()
{
struct node *p, *q;
int i=0, a;
printf("请输入表(以0结束):\n");
scanf("%d", &a); //接收输入的数字
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
if(a==0)
{
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
p->data=a;
p->next=NULL;
}
while(a!=0)
{
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
if(i==0)
{ p->next=NULL; }
else
{ p->next=q; }
p->data=a; //向链表存数据
q=p;
i++;
scanf("%d", &a); //接收输入的数字
}
p=revercelink(p);
return p;
}
//输出链表
struct node *output(struct node *head)
{
struct node *p;
p=head;
while(p!=NULL)
{
printf("%3d", p->data);
p=p->next;
}
printf("\n");
return head;
}
//主函数
int main()
{ struct node *head, *p;
head=createlink();
printf("原链表为:\n");
head=output(head);
head=revercelink(head);
printf("逆置后的表为:\n");
head=output(head);
return 0;
}
/*输出示例:
请输入表(以0结束):
1 2 3 4 5 6 7 8 9 0
原链表为:
1 2 3 4 5 6 7 8 9
逆置后的表为:
9 8 7 6 5 4 3 2 1
请按任意键继续. . . */
#include<stdlib.h>
#include <malloc.h>
struct node //定义结构体
{
int data;
struct node * next;
};
//逆置链表
struct node *revercelink(struct node *head)
{
struct node *p, *q, *r;
r=p=head;
q=p->next;
p->next=NULL;
while(q!=NULL)
{
p=q;
q=q->next;
p->next=r;
r=p;
}
return p;
}
//创建链表
struct node *createlink()
{
struct node *p, *q;
int i=0, a;
printf("请输入表(以0结束):\n");
scanf("%d", &a); //接收输入的数字
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
if(a==0)
{
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
p->data=a;
p->next=NULL;
}
while(a!=0)
{
p=(struct node *)malloc(sizeof(struct node)); //开辟链表空间
if(i==0)
{ p->next=NULL; }
else
{ p->next=q; }
p->data=a; //向链表存数据
q=p;
i++;
scanf("%d", &a); //接收输入的数字
}
p=revercelink(p);
return p;
}
//输出链表
struct node *output(struct node *head)
{
struct node *p;
p=head;
while(p!=NULL)
{
printf("%3d", p->data);
p=p->next;
}
printf("\n");
return head;
}
//主函数
int main()
{ struct node *head, *p;
head=createlink();
printf("原链表为:\n");
head=output(head);
head=revercelink(head);
printf("逆置后的表为:\n");
head=output(head);
return 0;
}
/*输出示例:
请输入表(以0结束):
1 2 3 4 5 6 7 8 9 0
原链表为:
1 2 3 4 5 6 7 8 9
逆置后的表为:
9 8 7 6 5 4 3 2 1
请按任意键继续. . . */
线性表顺序存储:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
typedef char ElemType;
typedef struct
{
ElemType a[100];//定义结构体
int last;
}list;
//创建线性表
void creat(list *L)
{
int n,i;
ElemType x;
printf("请输入数据元素个数(在 0到 100之间):");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("a[%d]=",i);
fflush(stdin);//清除键盘缓冲区
scanf("%c",&x);//接收输入的字符
L->a[i]=x;
}
L->last=n;
printf("\n");
}
//逆置线性表
list *reverse(list *L)
{
ElemType t;
int i;
for(i=0;i<L->last/2;i++)//前一半与后一半交换
{
t=L->a[i];
L->a[i]=L->a[L->last-i-1];
L->a[L->last-i-1]=t;
}
return L;
}
//输出线性表
void out(list *L)
{
int i;
for(i=0;i<L->last;i++)
{
printf("a[%d]=",i);
printf("%c\n",L->a[i]);
}
printf("\n");
}
//主函数
int main()
{
list *L;
int i;
L=(list *)malloc(sizeof(list));//开辟空间
creat( L);
printf("线性表的原顺序为:\n");
out(L);
printf("逆置后的顺序为:\n");
reverse(L);
out(L);
return 0;
}
/*输出示例
请输入数据元素个数(在 0到 100之间):9
a[0]=a
a[1]=b
a[2]=c
a[3]=d
a[4]=e
a[5]=f
a[6]=g
a[7]=h
a[8]=i
线性表的原顺序为:
a[0]=a
a[1]=b
a[2]=c
a[3]=d
a[4]=e
a[5]=f
a[6]=g
a[7]=h
a[8]=i
逆置后的顺序为:
a[0]=i
a[1]=h
a[2]=g
a[3]=f
a[4]=e
a[5]=d
a[6]=c
a[7]=b
a[8]=a
请按任意键继续. . .*/
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
typedef char ElemType;
typedef struct
{
ElemType a[100];//定义结构体
int last;
}list;
//创建线性表
void creat(list *L)
{
int n,i;
ElemType x;
printf("请输入数据元素个数(在 0到 100之间):");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("a[%d]=",i);
fflush(stdin);//清除键盘缓冲区
scanf("%c",&x);//接收输入的字符
L->a[i]=x;
}
L->last=n;
printf("\n");
}
//逆置线性表
list *reverse(list *L)
{
ElemType t;
int i;
for(i=0;i<L->last/2;i++)//前一半与后一半交换
{
t=L->a[i];
L->a[i]=L->a[L->last-i-1];
L->a[L->last-i-1]=t;
}
return L;
}
//输出线性表
void out(list *L)
{
int i;
for(i=0;i<L->last;i++)
{
printf("a[%d]=",i);
printf("%c\n",L->a[i]);
}
printf("\n");
}
//主函数
int main()
{
list *L;
int i;
L=(list *)malloc(sizeof(list));//开辟空间
creat( L);
printf("线性表的原顺序为:\n");
out(L);
printf("逆置后的顺序为:\n");
reverse(L);
out(L);
return 0;
}
/*输出示例
请输入数据元素个数(在 0到 100之间):9
a[0]=a
a[1]=b
a[2]=c
a[3]=d
a[4]=e
a[5]=f
a[6]=g
a[7]=h
a[8]=i
线性表的原顺序为:
a[0]=a
a[1]=b
a[2]=c
a[3]=d
a[4]=e
a[5]=f
a[6]=g
a[7]=h
a[8]=i
逆置后的顺序为:
a[0]=i
a[1]=h
a[2]=g
a[3]=f
a[4]=e
a[5]=d
a[6]=c
a[7]=b
a[8]=a
请按任意键继续. . .*/