(数据结构C语言版)顺序表和单链表的逆置.docx
《(数据结构C语言版)顺序表和单链表的逆置.docx》由会员分享,可在线阅读,更多相关《(数据结构C语言版)顺序表和单链表的逆置.docx(6页珍藏版)》请在冰点文库上搜索。
实验1-1顺序表的逆置操作
程序原码
#include//创建顺序表,确定元素个数,插入各个元素,逆置列表。
#include
#include
#definemax_list_size100//定义给顺序表分配空间大小
typedefstruct{
int*elem;
intlength;
}list_node;//指向顺序表首地址的结构体单元
list_nodeL;//这里使用了全局变量,在所有的函数里可以随意修改其值
intlist[max_list_size];
voidinit();//初始化操作
voidinversion();//倒置部分
voidcreat();//建表部分
voiddisplay();//显示部分
//*************主函数******************
intmain()
{
init();
creat();
printf("\n您输入的顺序表的结点数:
\n");
display();
inversion();
printf("\n倒置顺序表的结点数:
\n");
display();
}
//*************初始化操作分配空间******************
voidinit()
{
L.elem=(int*)malloc(max_list_size*sizeof(int));
if(!
L.elem){
printf("顺序表已满");
exit(-1);
}
L.length=0;
}
//*************以下为建表部分******************
voidcreat(){
inta,b,i;
printf("请输入顺序表的结点数:
");
scanf("%d",&a);
if(a<=0){
printf("顺序表个数要为正整数!
请重新输入:
");
scanf("%d",&a);
}
if(a>max_list_size-1||a<0)
{
printf("分配失败,退出程序!
\n");
exit
(1);
}
for(i=0;i!
=a;++i)
{
printf("请输入第%d结点的值:
",i+1);
scanf("%d",&b);
L.elem[i]=b;
++L.length;
}
}
//****************以下为倒置部分**********************
voidinversion(){
inta,b,i;
a=L.length;
for(i=1;i<=a/2;i++)
{
b=L.elem[i-1];
L.elem[i-1]=L.elem[a-i];
L.elem[a-i]=b;
}
}
//****************以下为显示部分**********************
voiddisplay(){
inti;
for(i=1;i<=L.length;++i)
printf("%d\t",L.elem[i-1]);
printf("\n");
}
实验1-1测试结果
输入一个正数、
输入一个负数、
实验1-2单链表的逆置操作
程序原码
//创建一个单链表,确定元素个数,插入各个元素,进行逆置操作,并输出。
#include
#include
#include
//单链表的链式存储结构
typedefstructNode
{
intdate;
structNode*next;
}LNode,*PLNode;
PLNodeCreat_Link();//创建链表
voidTreaver_Link(PLNodeHead);//输出链表
voidReaverse_Link(PLNodeHead);//逆置链表
voidmain()
{
PLNodeHead;
Head=Creat_Link();//创建链表
printf("您输入的单链表为:
\n");
Treaver_Link(Head); //输出链表
Reaverse_Link(Head); //逆置链表
printf("逆置后的的单链表为:
\n");
Treaver_Link(Head); //输出链表
}
//************以下为单链表的创建部分**************
PLNodeCreat_Link()
{
inti,t,y;
PLNodeHead=(PLNode)malloc(sizeof(LNode));
PLNodetail;
PLNodeNew;
if(!
Head){
exit(-1);
}
tail=Head;
Head->next=NULL;
printf("请输入链表的个数:
");
scanf("%d",&t);
if(t<=0){
printf("链表个数要为正整数!
请重新输入:
");
scanf("%d",&t);
}
for(i=0;i printf("请输入第%d个结点数据:
",i+1);
scanf("%d",&y);
New=(PLNode)malloc(sizeof(LNode));
if(!
New){
exit(-1);
}
New->date=y;
New->next=tail->next;
tail->next=New;
tail=New;
}
returnHead;
}
//************以下为单链表的逆置部分**************
voidReaverse_Link(PLNodeHead)
{
PLNodep,q;
p=Head->next;
Head->next=NULL;
while(p){
q=p->next;
p->next=Head->next;
Head->next=p;
p=q;
}
return;
}
//************以下为单链表的显示部分**************
voidTreaver_Link(PLNodeHead)
{
PLNodep;
if(!
Head->next){
printf("链表为空退出程序!
");
exit(-1);
}
p=Head->next;
while(p){
printf("%d\t",p->date);
p=p->next;
}
printf("\n");
return;
}
实验1-2测试结果
输入一个正数、
输入一个负数、
5