C语言链表基本操作范本模板.docx
《C语言链表基本操作范本模板.docx》由会员分享,可在线阅读,更多相关《C语言链表基本操作范本模板.docx(8页珍藏版)》请在冰豆网上搜索。
C语言链表基本操作范本模板
//链表操作:
建立、插入、删除、查找、倒置、删除等基本操作
//喜洋洋制作
#include〈stdio.h〉
#include〈stdlib.h>
typedefstructLNode
{
intdata;
structLNode*next;
}LNode,*Llist;
LNode*creat_head();//创建一个空表
voidcreat_list(LNode*,int);//创建一个长度为n的线性链表
voidinsert_list(LNode*,int,int);//插入一个元素
intdelete_list(LNode*,int);//删除一个元素
intfound_list(LNode*,int);//链表查询
voidreverse(LNode*);//倒置整个链表
voiddelete_whole(LNode*);//删除整个链表
voidprint_list(LNode*);//打印链表
main()
{
LNode*head;
intn,n2;
intx,i;
intb;
chartemp1,temp2;
head=creat_head();
printf("请输入链表的节点个数n=");
scanf(”%d”,&n);
printf(”\n请输入数据:
\n”);
creat_list(head,n);//创建链表
print_list(head);
printf(”\n*********************************************************\n");
printf(”\n下面进行链表插入元素\n");
printf(”\n请输入您需要插入的元素x=”);
scanf(”%d”,&x);
printf(”\n请输入即将插入的位置i=");
scanf(”%d",&i);
insert_list(head,x,i);//插入元素
print_list(head);
printf(”\n*********************************************************\n");
printf("\n下面进行链表删除元素\n");
printf("\n请输入即将删除元素的位置:
i=");
scanf(”%d”,&i);
b=delete_list(head,i);//删除元素
print_list(head);
printf(”\n\n成功删除元素:
%d”,b);
printf("\n*********************************************************\n”);
printf(”\n下面进行链表查询\n”);
printf(”\n请输入即将查询的元素:
x=");
scanf("%d",&n2);
if(found_list(head,n2)〉0)//链表查询
printf("找到了,在第%d的位置上",found_list(head,n2));
else
printf(”没有找到!
");
printf("\n*********************************************************\n”);
printf("\n是否倒置整个链表?
Y/N\n");
fflush(stdin);
scanf(”%c",&temp1);
if(’Y’==temp1)//倒置链表
{
reverse(head);
print_list(head);
}
printf("\n*********************************************************\n");
printf("\n是否删除整个链表?
Y/N\n");
fflush(stdin);
scanf("%c”,&temp2);
if(’Y'==temp2)//删除链表
{
delete_whole(head);
printf("\n成功删除整个链表\n");
}
}
//创建一个空链表
LNode*creat_head()
{
LNode*p;
p=(Llist)malloc(sizeof(LNode));
if(NULL==p)
printf(”内存申请失败!
");
else
{
p->next=NULL;
return(p);
}
}
//创建一个长度为n的线性链表
voidcreat_list(LNode*head,intn)
{
LNode*p,*q;
inti;
p=head;
for(i=1;i〈=n;i++)
{
q=(Llist)malloc(sizeof(LNode));
if(NULL==p)
printf(”内存申请失败!
”);
else
{
printf(”data:
”);scanf(”%d”,&q—>data);
q—〉next=NULL;
p—>next=q;
p=q;
}
}
}
//插入一个元素
voidinsert_list(LNode*head,intx,inti)
{
intj=0;
LNode*p,*s;
p=head;
while((p!
=NULL)&&(j〈i—1))
{
p=p—〉next;
j++;
}
if(p==NULL)exit(0);
s=(Llist)malloc(sizeof(LNode));
if(NULL==p)
printf(”内存申请失败!
”);
else
{
s-〉data=x;
s—〉next=p-〉next;
p—>next=s;
}
}
//删除一个元素
intdelete_list(LNode*head,inti)
{
LNode*p,*q;
intj=0;
intx;
p=head;
while((p!
=NULL)&&(j
{
p=p->next;
j++;
}
if(p==NULL)exit(0);
q=p—〉next;
p->next=q-〉next;
x=q—>data;
free(q);
q=NULL;
return(x);
}
//删除整个链表
voiddelete_whole(LNode*head)
{
LNode*p,*q;
p=head;
while(p!
=NULL)
{
q=p—>next;
free(p);
p=q;
}
}
//倒置链表
voidreverse(LNode*head)
{
LNode*p,*s,*t;
p=head;
s=p-〉next;
while(s-〉next!
=NULL)//主要置换过程
{
t=s-〉next;
s—>next=p;
p=s;
s=t;
}
s—>next=p;
head—>next—〉next=NULL;//收尾
head->next=s;//赋头
}
//打印链表
voidprint_list(LNode*head)
{
LNode*p;
for(p=head—>next;p!
=NULL;)
{
printf(”%d",p-〉data);
p=p—〉next;
}
}
//链表查询
intfound_list(LNode*head,intn)
{
LNode*p;
inti=1;
for(p=head-〉next;p!
=NULL;)
{
if(n==p—>data)
{
returni;
}
i++;
p=p—>next;
}
if(NULL==p)
return0;
}