严蔚敏 数据结构(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语言实现相关推荐

  1. 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码

    一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...

  2. KMP算法-严蔚敏数据结构

    KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法.该算法相对于 Brute- ...

  3. 严蔚敏数据结构源码及习题解析

    ⭐ 我的网站: www.mengyingjie.com ⭐ 严蔚敏数据结构源码及习题解析 习题解析未更新完整,以后更新 内容已上传到github,欢迎star和fork: https://github ...

  4. 考研961数据结构c语言版真题,严蔚敏数据结构C语言版考研真题库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严蔚敏<数据结构>(C语言版)配套题库[考研真题精选(部分视频讲解)+章节题库] 下载来源:http://fangcai.100xuexi.c ...

  5. 2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】

    本文记录了我为期三个月<算法与数据结构>的学习历程,仅作为记录自己学习状态的文章. 线性表 2021-9-14[数据结构/严蔚敏][顺序表][代码实现算法2.1-2.7] 2021-9-1 ...

  6. 严蔚敏数据结构c++版微盘_数据结构复习知识点总结

    <数据结构>重点在线性表.树.图.查找和排序.参考书目是<数据结构>(C语言版)严蔚敏.吴伟民编著.通过对线性表.队列.栈和数组的了解,进一步理解其含义,熟悉各种例如进栈.出栈 ...

  7. IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)

    我们都知道程序=数据结构+算法.相信很多人都学过严蔚敏的数据结构的课程.作为一个码农,在这不管是3.7女神节,还是3.8妇女节.我觉得都有必要向这些教育界的老前辈致敬.今天我就梳理梳理,最经典的数据结 ...

  8. 严蔚敏——数据结构——图(C语言版)

    学习目标:什么是图? 图中有顶点和边(V,E),所以图包括两个集合:顶点集合和边集合. 顶点集合至少一个顶点,并且顶点不能无穷多. 边集合可以为空,也是有穷集合. 图的基本术语: 图的例子: 上面可以 ...

  9. 严蔚敏数据结构c++版微盘_招聘 | 传智 C 位,等你坐镇~

    传智内部招聘 加入传智播客,享受更多员工福利! 五险一金.补充医疗险.意外险.交通补助.餐补.免费体检.员工旅游.生日福利.节日福利.免费体育健身活动.传智父母节福利等等. 有意请将简历发送到邮箱 z ...

  10. 数据结构 绪论+视频资料(修订版)严蔚敏、陈文博版

    资料(我感觉老师讲的不错,通俗易懂 需要自取,比较有逻辑 老师是赵海英) 链接: https://pan.baidu.com/s/1zJ-6nvT_0Ya21liHuQS-sw 密码: 496e ht ...

最新文章

  1. 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思
  2. BOOST_LOCAL_FUNCTION宏用法的测试程序
  3. JAVA岗位比嵌入式岗位_java嵌入式职业选择?
  4. 小记 cin/get/getline
  5. multi task训练torch_采用single task模型蒸馏到Multi-Task Networks
  6. Hadoop HIVE JavaAPI
  7. Hadoop本地库介绍及相关问题解决方法汇总
  8. matlab m语言电路仿真,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
  9. GCC Link Time Optimization
  10. 数字电路与逻辑设计——组合逻辑篇
  11. DataScience:风控场景之金融评分卡模型构建—将逻辑回归LoR模型结果转为评分卡之详细攻略
  12. keepalived 健康检查机制说明
  13. java对接企业微信
  14. 我们接了条预算100000000的广告!!!
  15. Supervisor socket.error No such file or directory file /usr/lib64/pyth
  16. e4a打开java源代码_E4A源码怎么使用?E4A源代码用什么打开?
  17. 什么是语法糖(Syntactic sugar)?
  18. 服务器协议和交换机怎么转换,服务器与交换机连接怎样配置
  19. 长龙航空软件测试招聘,长龙航空空乘面试经验
  20. 最新《JPA入门到精通JAVA进阶项目实战》

热门文章

  1. 返利网的制作思路与原理
  2. 【金曲榜】————1、《修炼爱情》(林俊杰)
  3. HCL软件,堆叠工程尝试,S5820V2-54QS-GE
  4. 【JY】结构概念之(消能减震黏滞阻尼器)
  5. vue 登录页qq快速登录功能
  6. 1.一个模型,帮你找到真正热爱的工作
  7. mysql如何成祖_明成祖朱棣原是藩王,成为皇帝以后是如何解决的藩王问题?
  8. namecheap关闭域名自动续费的方法步骤
  9. 液晶12864(KS0108主控)
  10. 惠普服务器重装系统步骤,惠普服务器安装系统相关介绍