c数据结构单链表的建立与基本应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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&&j
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); }