c数据结构单链表的建立与基本应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"

#include"stdlib.h"

typedef struct node

{

int data;

struct node *next;

}Lnode,*Linklist;

input(Lnode *p,int n)//实现用键盘顺序输入链表数据{

Lnode *s;int i,d;

printf("请输入数据:");

for(i=1;i<=n;i++)

{

if(i==1)

{

scanf("%d",&d);

p->data=d;

continue;

}

if(n==1)break;

scanf("%d",&d);

s=(Linklist)malloc(sizeof(Lnode));

s->data=d;

p->next=s;

s->next=NULL;

p=s;//使当前指针指向链表尾部节点

}

}

output(Lnode *p,int n)//实现输出当前链表所有数据

{

int i=1;

printf("当前链表的值为:");

while(p->next!=NULL)

{

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

p=p->next;

i++;

}

if(i==n)//当是最后一个节点时,其next已经是空,所以最后一个节点数据无法用while循环写出,所以另用了一个计数器i

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

}

insert(Lnode *p,int i,int e)//实现在第i个元素之后插入新元素{

int j=0;Lnode *s;

while(p&&jnext;++j;}if(!p||j>i-1)return 0;

s=(Linklist)malloc(sizeof(Lnode));

s->data=e;s->next=p->next;p->next=s;

return 1;

}

delet(Lnode *p,int i)//实现删除链表中第i+1个元素

{

int j=0;Lnode *q;

while(p->next&&j

{

p=p->next;++j;

}

if(!(p->next)||j>i-1)return 0;

q=p->next;p->next=q->next;

free(q);

return 1;

}

search(Lnode *p,int e,int n)

{

int i=1;

while(p->next!=NULL)

{

if(p->data==e)

{

printf("在链表中找到了相同元素");

break;

}

p=p->next;

i++;

}

if(i==n)

{

if(p->data==e)

printf("在链表中找到了相同元素");

else

printf("在链表中没有寻找到相同元素");

}

}

void main()

{

Lnode *head;int n,i,e;

head=(Linklist)malloc(sizeof(Lnode));

head->next=NULL;//建立空链表头

printf("请输入链表长度:");

scanf("%d",&n);

input(head,n);

output(head,n);

printf("\n请输入要在链表的第几个元素之后插入数据:"); scanf("%d",&i);

printf("请输入要插入的数据:");

scanf("%d",&e);

insert(head,i,e);

output(head,n+1);

printf("\n请输入要删除链表第几个节点之后的元素:"); scanf("%d",&i);

delet(head,i);

output(head,n);

printf("\n请输入要查找的数据:");

scanf("%d",&e);

search(head,e,n);

}

相关文档
最新文档