严蔚敏 数据结构(c语言版)c语言实现
严蔚敏 数据结构(c语言版)c语言实现(更新中)
线性表
线性表的顺序存储
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define LIST_INIT_SIZE 100 //存储空间的初始分配量
#define LISTINCREMENT 10 //存储空间的分配量增值
#define Status int //顺序表的结构 (存储元素的数组和长度)
typedef struct{ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储量 (单位是sizeof(ElemType))
}SqList; //初始化顺序表,构造一个空的顺序表
Status InitList_Sq(SqList *L){//申请动态内存 L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem) //内存分配失败 exit(0);L->length = 0; //空表的长度为0L->listsize = LIST_INIT_SIZE; //初始存储容量printf("初始化成功\n");return 0;
} //创建顺序表
void CreatList_Sq(SqList *L,int n){if(n >= L->listsize){int *newBase = (ElemType *)realloc(L->elem,(n)*sizeof(ElemType)); if(!newBase){//内存分配失败 printf("新内存分配失败\n");} L->elem = newBase; //新基址 L->listsize = n; //增加存储容量 }int *q;q = L->elem; //q为初始位置int i;printf("请输入要插入的元素:");for(i=1;i<=n;i++){int e;scanf("%d",&e);printf("添加元素:%d 成功\n",e); *q = e; //添加eq++;L->length++; }
} //插入函数 L中第i个位置之前插入新的元素e
Status ListInsert_Sq(SqList *L,int i,ElemType e){int *newBase,*q,*p; // i的合法值为1~length+1if(i < 1 || i > L->length+1){printf("插入位置不合法,请保证位置在1~length+1之间\n");return 0;}//当前存储空间已满,增加分配 if(L->length >= L->listsize){newBase = (ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));if(!newBase){ //内存分配失败 printf("新内存分配失败\n");return 0; }L->elem = newBase; //新基址 L->listsize += LISTINCREMENT; //增加存储容量 }q = &(L->elem[i-1]); //q为插入位置for(p = &(L->elem[L->length-1]);p >= q;p--){*(p+1)=*p; //插入位置和其之后的值右移 } *q = e; //插入eL->length++; printf("插入元素:%d 成功\n",e); return 0;
}//创建顺序表 初始化n个数据 (利用插入元素)
Status ListCreat_Sq(SqList *L,int n){int i;for(i=1;i<=n;i++){printf("请输入第%d个数:",i);int a;scanf("%d",&a);ListInsert_Sq(L,i,a);} printf("创建成功\n");return 0;
} //删除顺序表 在L上删除第i个元素并用e返回其值
Status ListDelete_Sq(SqList *L,int i,ElemType e){int *p,*q; // i的合法值为1~lengthif(i < 1 || i > L->length){printf("插入位置不合法,请保证位置在1~length之间\n");return 0;} p = &(L->elem[i-1]); //p为被删除元素的位置 e = *p; //将p的值赋给e q = L->elem + L->length-1; //表尾元素的位置for(p += 1;p <= q;p++){*(p-1) = *p; //被删除元素之后的元素左移 } printf("删除元素:%d 成功\n",e);L->length--; //表长减一 return e;
} //返回L中第i个元素的值
Status GetList_Sq(SqList *L,int i,ElemType e){int *q; // i的合法值为1~lengthif(i < 1 || i > L->length){printf("插入位置不合法,请保证位置在1~length之间\n");return 0;} q = &(L->elem[i-1]);e = *q;printf("第%d个元素值为%d\n",i,e);return e;
} //查找L中第一个等于e的元素位序
Status LocateElem_Sq(SqList L,ElemType e){//若找到,则返回其的位序,否则返回0int i = 1; //i的初始值为第一个元素的位序 1int *p; //定义p,初值为第一个元素的位置,即起始位置 p = L.elem;while(i <= L.length && *p!=e){ //当i在范围内并且p不等于e,循环 i++;*p++; } if(i <= L.length){printf("次序为%d\n",i);return i;} else{printf("没有找到符合要求的数"); return 0;}
}
//遍历顺序表
void ListTraverse_Sq(SqList L){printf("遍历开始:\n"); int *p;p = L.elem;int i;for(i=1;i<=L.length;i++){printf("%d ",*p);*p++;}printf("\n");
} //置空 将顺序表L置为空表
Status ClearEmpty_Sq(SqList *L){//将长度置为空即可 if(L->length > 0)L->length = 0;printf("置空操作成功\n");return 0;
} //销毁线性表
Status DestoryList(SqList *L){free(L->elem);L->elem = NULL;L->length = 0;L->listsize = 0;printf("顺序表销毁成功\n"); return 0;
} //查找前驱 cur_e不能是第一个元素
Status PriorElem_Sq(SqList L,ElemType cur_e,ElemType pre_e){printf("查找%d的前驱\n",cur_e);int *p;p = L.elem;if(cur_e == *p){printf("错误,第一个元素没有前驱\n");} int i;for(i=2;i<=L.length;i++){pre_e = *p;*p++;if(cur_e == *p){printf("%d的前驱是%d\n",cur_e,pre_e);break; } }return 0;
} //查找后继元素 cur_e不是最后一个元素
Status NextElem_Sq(SqList *L,ElemType cur_e,ElemType next_e){printf("查找%d的后继\n",cur_e);int *p;p = &(L->elem[L->length-1]);if(cur_e == *p){printf("错误,最后一个元素没有后继\n");} for(;p>L->elem;){next_e = *p;*p--;if(*p == cur_e){printf("%d的后继是%d\n",cur_e,next_e);break;}}return 0;
} int main(){SqList L; InitList_Sq(&L); int n,m,o,l,k,j,z,value1,value2,value3,value4,value5;printf("请输入要插入元素个数:");scanf("%d",&n); CreatList_Sq(&L,n);ListTraverse_Sq(L); printf("请输入查询元素所在的位置(返回其值):");scanf("%d",&o);GetList_Sq(&L,o,value2);printf("请输入查找元素的值:");scanf("%d",&l);LocateElem_Sq(L,l);printf("请输入查找的元素值(返回其前驱):");scanf("%d",&k);PriorElem_Sq(L,k,value3);printf("请输入查找的元素值(返回其后继):");scanf("%d",&j);NextElem_Sq(&L,j,value4);printf("请输入需要插入的元素位置和其值:");scanf("%d%d",&z,&value5);ListInsert_Sq(&L,z,value5);ListTraverse_Sq(L); printf("请输入删除元素所在的位置:");scanf("%d",&m);ListDelete_Sq(&L,m,value1);ListTraverse_Sq(L); ClearEmpty_Sq(&L);DestoryList(&L);return 0;
}
运行结果如下:
严蔚敏 数据结构(c语言版)c语言实现相关推荐
- 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码
一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...
- KMP算法-严蔚敏数据结构
KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法.该算法相对于 Brute- ...
- 严蔚敏数据结构源码及习题解析
⭐ 我的网站: www.mengyingjie.com ⭐ 严蔚敏数据结构源码及习题解析 习题解析未更新完整,以后更新 内容已上传到github,欢迎star和fork: https://github ...
- 考研961数据结构c语言版真题,严蔚敏数据结构C语言版考研真题库
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严蔚敏<数据结构>(C语言版)配套题库[考研真题精选(部分视频讲解)+章节题库] 下载来源:http://fangcai.100xuexi.c ...
- 2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】
本文记录了我为期三个月<算法与数据结构>的学习历程,仅作为记录自己学习状态的文章. 线性表 2021-9-14[数据结构/严蔚敏][顺序表][代码实现算法2.1-2.7] 2021-9-1 ...
- 严蔚敏数据结构c++版微盘_数据结构复习知识点总结
<数据结构>重点在线性表.树.图.查找和排序.参考书目是<数据结构>(C语言版)严蔚敏.吴伟民编著.通过对线性表.队列.栈和数组的了解,进一步理解其含义,熟悉各种例如进栈.出栈 ...
- IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)
我们都知道程序=数据结构+算法.相信很多人都学过严蔚敏的数据结构的课程.作为一个码农,在这不管是3.7女神节,还是3.8妇女节.我觉得都有必要向这些教育界的老前辈致敬.今天我就梳理梳理,最经典的数据结 ...
- 严蔚敏——数据结构——图(C语言版)
学习目标:什么是图? 图中有顶点和边(V,E),所以图包括两个集合:顶点集合和边集合. 顶点集合至少一个顶点,并且顶点不能无穷多. 边集合可以为空,也是有穷集合. 图的基本术语: 图的例子: 上面可以 ...
- 严蔚敏数据结构c++版微盘_招聘 | 传智 C 位,等你坐镇~
传智内部招聘 加入传智播客,享受更多员工福利! 五险一金.补充医疗险.意外险.交通补助.餐补.免费体检.员工旅游.生日福利.节日福利.免费体育健身活动.传智父母节福利等等. 有意请将简历发送到邮箱 z ...
- 数据结构 绪论+视频资料(修订版)严蔚敏、陈文博版
资料(我感觉老师讲的不错,通俗易懂 需要自取,比较有逻辑 老师是赵海英) 链接: https://pan.baidu.com/s/1zJ-6nvT_0Ya21liHuQS-sw 密码: 496e ht ...
最新文章
- 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思
- BOOST_LOCAL_FUNCTION宏用法的测试程序
- JAVA岗位比嵌入式岗位_java嵌入式职业选择?
- 小记 cin/get/getline
- multi task训练torch_采用single task模型蒸馏到Multi-Task Networks
- Hadoop HIVE JavaAPI
- Hadoop本地库介绍及相关问题解决方法汇总
- matlab m语言电路仿真,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
- GCC Link Time Optimization
- 数字电路与逻辑设计——组合逻辑篇
- DataScience:风控场景之金融评分卡模型构建—将逻辑回归LoR模型结果转为评分卡之详细攻略
- keepalived 健康检查机制说明
- java对接企业微信
- 我们接了条预算100000000的广告!!!
- Supervisor socket.error No such file or directory file /usr/lib64/pyth
- e4a打开java源代码_E4A源码怎么使用?E4A源代码用什么打开?
- 什么是语法糖(Syntactic sugar)?
- 服务器协议和交换机怎么转换,服务器与交换机连接怎样配置
- 长龙航空软件测试招聘,长龙航空空乘面试经验
- 最新《JPA入门到精通JAVA进阶项目实战》