在c语言中链表事例,C语言链表实例(转载)

//链表操作:建立、插入、删除、查找、倒置、删除等基本操作

//喜洋洋制作

#include

#include

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*Llist;

LNode *creat_head();//创建一个空表

void creat_list(LNode *,int);//创建一个长度为n的线性链表

void insert_list(LNode *,int,int );//插入一个元素

int delete_list(LNode *,int);//删除一个元素

int found_list(LNode *,int);//链表查询

void reverse(LNode *);//倒置整个链表

void delete_whole(LNode *);//删除整个链表

void print_list(LNode *);//打印链表

main()

{

LNode *head;

int n,n2;

int x,i;

int b;

char temp1,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的线性链表

void creat_list(LNode *head,int n)

{

LNode *p,*q;

int i;

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;

}

}

}

//插入一个元素

void insert_list(LNode *head,int x,int i )

{

int j=0;

LNode *p,*s;

p=head;

while((p!=NULL)&&(j

{

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;

}

}

//删除一个元素

int delete_list(LNode *head,int i)

{

LNode *p,*q;

int j=0;

int x;

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);

}

//删除整个链表

void delete_whole(LNode *head)

{

LNode *p,*q;

p=head;

while(p!=NULL)

{

q=p->next;

free(p);

p=q;

}

}

//倒置链表

void reverse(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;//赋头

}

//打印链表

void print_list(LNode * head)

{

LNode *p;

for(p=head->next;p!=NULL;)

{

printf("%d ",p->data);

p=p->next;

}

}

//链表查询

int found_list(LNode *head,int n)

{

LNode *p;

int i=1;

for(p=head->next;p!=NULL;)

{

if(n==p->data)

{

return i;

}

i++;

p=p->next;

}

if(NULL==p)

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值