C语言指针链表(增、删、改、查)

/** *时间:2010 年 8 月 28 日 17:19:49 *功能:C 语言实现单链表的建立、输入、插入、删除、查找元素并返回位置 */ #include"stdio.h" #include"stdlib.h" #include"malloc.h" /*假设输入的数据为 3 个--我比较好操作-_-*/ #define size 3

typedef struct List { int num; int shuju; struct List *next; }list;

/*头结点*/ list *setup_list(list *head) { printf("setup_list\n"); head=malloc(sizeof(list));

if(head==NULL) { printf("setup fail\n"); getch(); exit(0); } head->num=NULL; head->shuju=NULL; head->next=NULL; printf("setup success\n"); return head; } /*输入数据*/ void input(list *head,int num) { list *q=NULL;

list *s=NULL; s=malloc(sizeof(list)); s->next=NULL; printf("input the %d data:",num); scanf("%d",&s->shuju);

s->num=num;

q=head; while(q->next!=NULL) { q=q->next; } q->next=s; } /*浏览*/ void browse(list *head) { list *q=NULL; q=head->next; while(q!=NULL) { printf("num:%d\n",q->num); printf("shuju:%d\n",q->shuju); q=q->next; } }

/*插入 num 值有主函数控制*/ void insert_list(list *head,int num) { list *q=NULL; list *p=NULL; list *s=NULL; q=head; p=q->next; while(p!=NULL&&p->num!=num) { q=p; p=q->next; } s=malloc(sizeof(list)); printf("input shuju"); scanf("%d",&s->shuju); s->num=num;

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

/*整理 num 后面的数后推*/

while(p!=NULL) { num++; p->num=num; p=p->next; } }

void delete_list(list *head,int num) { list *q=NULL; list *p=NULL;

q=head; p=q->next; while(p!=NULL&&p->num!=num) { q=p; p=q->next; }

q->next=p->next;

free(p); printf("num %d\n",num); p=q->next; while(p!=NULL) { p->num=num; num++; p=p->next; }

}

/*查找元素 并返回位置*/ list *find_list(list *head,int data) { list *q=NULL; list *p=NULL; q=head; p=q->next; while(p!=NULL&&p->shuju!=data) { q=p;

p=q->next; } printf("num :%d data : %d\n",p->num,p->shuju); return p;

}

exit_list(list *head) { printf("exit ok"); free(head);

getch(); }

main() { int middle=0; int num=0; int i=0; list *head=NULL; list *s=NULL;/*接收指针 case3 的指针接收*/

head=setup_list(head); printf("head->next %d\n",head->next); printf("head->num %d\n",head->num); printf("head->shuju %\n",head->shuju); getch();

for(i=0;i<size;i++) { input(head,num); num++; } browse(head); ********************************************************* /*1 插入 2 删除 3 查找 4 浏览 5 退出*/ ********************************************************* for(;;) { printf("input middle:"); scanf("%d",&middle); switch(middle) { case 1:

printf("insert \ninput num:"); scanf("%d",&num); insert_list(head,num); break; case 2: printf("delete \ninput num:"); scanf("%d",&num); delete_list(head,num); break; case 3: printf("find \ninput data:"); scanf("%d",&num); s=find_list(head,num); /*数据查找 s 已经接收,至于你要做什么,我就 不懂了,你自己添加*/ break; case 4: browse(head); break; case 5: exit_list(head); return; /*输入异常的时候*/

default: break; }

}

}


相关文档

C语言用指针和链表读写文件
C语言指针链表
二级C - 指针和链表
C语言中指针链表学习
爱学习之C语言 第11章 用指针处理链表
通过使用指针,进一步熟悉链表操作,实现添加,删除,修改,查找,排序等功能。
C语言-天津师大8@-第八章 指针及链表
C语言链表的建立、插入、删除、查询与显示
用C语言实现查询链表是否出现环
线性链表的创建、查找、插入、删除(c语言)
电脑版