C语言数据结构——单链表
来源:互联网 发布:nginx 配置多个域名 编辑:程序博客网 时间:2024/06/06 01:22
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"></span>数据结构的一些讲解,供学习者参考,也顺带作为复习 </span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 链表与顺序表不同,它是一种动态的存储结构,链表中每个结点占用的存储空间不是预先分配的,而是运行时系统根据需求生成的,因此建立单链表从空表开始,每读入一个数据元素则申请一个结点,然后插在链表的头部。下图为链表的构建过程,因为是在链表的头部插入,读入数据的顺序表和线性表的逻辑顺序是相反的。</span>
链表建立
LinkList Creat_LinkList(){LNode *s;int x;printf("请输入数据(输入'0'表结束输入):\t");scanf("%d",&x);while(x!=0){s=(LNode *)malloc(sizeof(LNode));s->data=x;s->next=L;L=s;printf("请输入数据(输入'0'表结束输入):\t");scanf("%d",&x);}return L;}
获取某个位置的数据
LNode *Get_LinkList(LinkList L,int i){LNode *p=L;int j=0;while(p->next!=NULL&&j<i){p=p->next;j++;}if(j==i)return p;else return NULL;}
定位到某个元素的结点
LNode *Locate_LinkList(LinkList L,int x){LNode *p=L->next;while(p!=NULL&&p->data!=x)p=p->next;return p;}
插入算法1,i为插入的位置,x为插入的元素
int Insert_LinkList_1(LinkList L,int i,int x){LNode *p,*s;p=Get_LinkList(L,i-1);if(p==NULL){printf("参数i错误\n");return 0;}else {s=(LNode *)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;return 1;}}
插入算法2:表头插入
LinkList Insert_LinkList_2(LinkList L,int x){LNode *s;s=(LNode *)malloc(sizeof(LNode));s->data=x;s->next=L;L=s;return L;}
删除链表某个位置的元素
int Del_LinkList(LinkList L,int i){LinkList p,s;p=Get_LinkList(L,i-1);if(p==NULL){printf("第i-1个结点不存在\n");return -1;}else if(p->next==NULL){printf("第i个结点不存在\n");return 0;}else{s=p->next;p->next=s->next;free(s);return 1;}}
计算链表的长度
int Length_LinkList(LinkList L){LNode *p=L;int j=0;while(p){p=p->next;j++;}return j;}
输出链表内的所有元素
void OutputList(LinkList L){LNode *p=L;while(p){printf("%4d",p->data);p=p->next;}}
主函数设计
void main(){LinkList H=NULL;int item,model,addr;while(1){printf("请选择操作:\n【1】创建链表\n【2】特定位置插入数据\n【3】表头插入数据\n【4】特定元素删除\n【5】表长度\n【6】查看链表\n【7】退出\n");printf("请输入:\t");scanf("%d",&model);fflush(stdin);switch(model){case 1:H = Creat_LinkList();OutputList(H);break;case 2:while(1){printf("请输入插入的位置\t");scanf("%d",&addr);if(addr==0)break;printf("请输入插入的数据\t");scanf("%d",&item);Insert_LinkList_1(H,addr,item);}OutputList(H);break;case 3:while(1){printf("请输入插入的数据\t");scanf("%d",&item);if(item==0)break;H=Insert_LinkList_2(H,item);}OutputList(H);break;case 4:while(1){printf("请插入删除的位置\t");scanf("%d",&addr);if(addr==0)break;Del_LinkList(H,addr);}OutputList(H);break;case 5:printf("%d\n",Length_LinkList(H));break;case 6:OutputList(H);printf("\n");break;case 7:exit(0);default:printf("输入有误,请重新输入\n");}}}
需要源代码的欢迎下载,免积分,共同学习,家下来每天都会分享一篇,持续一个星期
http://download.csdn.net/detail/kevin_iot/9395889
0 0
- 数据结构——单链表(C语言实现)
- C语言数据结构——单链表
- C语言数据结构——单链表
- 数据结构--单链表(C语言)
- C语言数据结构-单链表
- 数据结构C语言实现系列——单链表
- 数据结构与算法(C语言描述)——单链表
- 数据结构——单链表(C语言实现)
- 数据结构—单链表的部分基本操作(C语言)
- 数据结构—单链表(类C语言描述)
- 数据结构——双端堆(C语言)
- 数据结构——左高树(C语言)
- 数据结构——二项堆(C语言)
- C语言数据结构——顺序表
- C语言数据结构——栈
- C语言数据结构——队列
- C语言数据结构——队列
- C语言数据结构——循环队列
- iOS视图层次结构
- hdoj5093Battle ships【二分图最大匹配】
- 如何在windows上创建一个openoffice.org服务
- windows php7+nginx配置
- lwIP(V1.3.0)RAW_API译文
- C语言数据结构——单链表
- 设置Launch Image 图片
- MAC 苹果电脑如果安装brew
- apktool,dex2jar,jd-gui简单使用与实战
- 【虚函数、虚拟指针、虚表指针】解析多重继承时,虚表的分布
- Android自定义View时使用TypedArray配置样式属性
- window下Tomcat Permgen设置,亲验有效
- 搭建Hadoop源代码阅读环境
- ionic-v1.7.12-ios版修改