【C】利用单链表数据结构实现通讯录,链表的增删改查
来源:互联网 发布:数据挖掘要学哪些东西 编辑:程序博客网 时间:2024/05/16 13:59
C语言中实现链表,是需要利用到C语言中比较难的结构体与指针才能实现。
结构体中放一个指向后接节点的指针与每一个结点应该存放的信息。
下面做一个命令行的通讯录来说明链表的增删改查这个问题。
一开始让用户输入链表,按1可以输出,按3可以删除。
可以修改:
可以插入。
按0则可以退出:
代码如下:
#include<stdio.h>#include<stdlib.h>typedef struct Linklist{char name[10];//存放名字char num[10];//存放电话号码struct Linklist *next;}Linklist,*LNode;//创建链表void create(Linklist *L){char flag='y';Linklist *p,*s;p=L;puts("创建一个通讯录:");while(flag=='Y'||flag=='y'){//初始化生成块s=(LNode)malloc(sizeof(Linklist));printf("姓名:");scanf("%s",s->name);printf("号码:");scanf("%s",s->num);//尾插法核心语句开始s->next=NULL;//注意封口p->next=s;p=s;//尾插法核心语句结束//吃换行符getchar();printf("继续输入?(y/n)");scanf("%c",&flag);}}//输出链表void output(Linklist *L){Linklist *p;p=L->next;puts("编号\t姓名\t号码");//表头puts("====\t====\t====");//华丽的分割线int count=1;while(p){printf("%d\t%s\t%s\n",count,p->name,p->num);p=p->next;count++;}}//修改链表中的某一项void update(Linklist *L){Linklist *p;p=L;int n;puts("需要修改哪一项?");scanf("%d",&n);for(int i=1;i<n+1;i++){p=p->next;//把指针移位到需要修改的一项}if(p==NULL){puts("没有这项!");}else{printf("姓名:");scanf("%s",p->name);printf("号码:");scanf("%s",p->name);}}//在链表尾部插入一项void insert(Linklist *L){Linklist *p,*s;p=L;while(p->next){//尾插法,直接把指针移位到尾部p=p->next;}//初始化生成块s=(LNode)malloc(sizeof(Linklist));printf("姓名:");scanf("%s",s->name);printf("号码:");scanf("%s",s->num);//尾插法核心语句开始s->next=NULL;//注意封口p->next=s;//只插入一项,无须p=s//尾插法核心语句结束}//在链表中删除一项void del(Linklist *L){//不写delete是因为delete是C语言的关键字Linklist *p,*q;p=L;int n;puts("需要删除哪一项?");scanf("%d",&n);//这里的指针定位不同于修改,我们需要把指针定位到要删除的前一项,进行删除for(int i=1;i<n;i++){p=p->next;}if(p==NULL){puts("没有这项!");}else{//删除的核心语句q=p->next;p->next=q->next;free(q);}}void main(){Linklist *L;int i=255;L=(LNode)malloc(sizeof(Linklist));//熟记malloc的用法,词句为开创一个长为Linklist的空间,而后被L所指向L->next=NULL;//此处头结点的尾指针必须封口,否则不同的编译器会编译出不同的成分。create(L);while(i!=0){puts("\n功能:\n1.输出\t2.修改\t3.删除\t4.插入\t0.退出");scanf("%d",&i);switch(i){case 1:output(L);break;case 2:update(L);break;case 3:del(L);break;case 4:insert(L);break;}}}
链表的各类增删改查操作写在各个函数了。
其实也不难,
链表的增加采用尾插法,先开辟一个结点空间,用一个指针所指,把操作的指针移到结点的最后,连接新开辟的结点
删除一项先把指针移到要删除的项之前,再用一个指针移到要删除的项,删除完毕,把前一项的后接指针移到下两项
查询、修改最简单,只是一个单纯的指针移动过程。
0 0
- 【C】利用单链表数据结构实现通讯录,链表的增删改查
- 【C++】单链表的增删查改实现
- 通讯录的增删改查
- C链表的增删查改
- C语言:动态顺序表的增删查改,数据结构
- 数据结构线性表的动态顺序实现增删改查
- 数据结构顺序表的“增删改查”功能实现
- ObjectC----实现简单的通讯录(增删改查)
- 数据结构之链表实现增删改查
- 数据库存储通讯录,实现“增删改查”
- 增删改查通讯录
- 通讯录增删改查
- 通讯录----- 增删改查
- 增删改查通讯录
- 【数据结构】单链表的增删改查
- 【数据结构】顺序表的增删改查
- 数据结构顺序表的增删查改
- android 通讯录的增删改查
- EEPROM数据丢失的原因与对策
- iOS开发之保存照片到自己创建的相簿
- Android APK 反编译工具
- PAT 1013. Battle Over Cities (25)
- ios隐藏uitableview下面多余的tableview的线条
- 【C】利用单链表数据结构实现通讯录,链表的增删改查
- Spring AOP 学习之cJlib动态代理
- PDF目录标签自动生成示范 《Handbook.of.Applied.Cryptography》(Alfred.J..Menezes).pdf
- 已知字符串中的单词间由单个空格隔开,实现函数,返回字符串s中出现次数最多的单词与次数组成的字符串
- python引用和复制一个对象
- C# coding-guidelines
- Android 手机壁纸(动态1)
- Linux - 延伸正则表达式
- java同步方法和同步代码块详解(通俗地讲解)