1. /* sequenceList.c */
  2. /* 顺序表 */
  3. /* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表。 */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <stdbool.h>
  8.  
  9. #define MAXSIZE 10
  10.  
  11. /* 顺序表结构 */
  12. typedef struct {
  13. int data[MAXSIZE]; /* 数据列表 */
  14. int last; /* 最后一个元素索引 */
  15. } SeqList;
  16.  
  17. /* 用户界面 */
  18. void interface(void){
  19. puts("+**********************************************+");
  20. puts("+ 0, quit 退出 +");
  21. puts("+ 1, insert 插入 +");
  22. puts("+ 2, delete 删除 +");
  23. puts("+ 3, locate 查找 +");
  24. puts("+ 4, traverse 遍历 +");
  25. puts("+ 5, fill 填充 +");
  26. puts("+ 6, sort(ascend) 排序(升序) +");
  27. puts("+ 7, sort(descend) 排序(降序) +");
  28. puts("+**********************************************+");
  29. }
  30.  
  31. /* 顺序表函数声明 */
  32. SeqList *initSeqList();
  33. int insertSeqList(SeqList*, int, int);
  34. int deleteSeqList(SeqList*, int);
  35. int locateSeqList(SeqList*, int);
  36. void traverseSeqList(SeqList*);
  37. void fillSeqList(SeqList*, int);
  38. void sortSeqList(SeqList*, bool);
  39.  
  40. /* 程序主入口 */
  41. int main(){
  42. SeqList *sl = initSeqList();
  43. int flag, number, index;
  44.  
  45. interface();
  46. for(;;){
  47. printf("Command: ");
  48. scanf("%d", &flag);
  49. switch(flag){
  50. case : printf("Bye!\n"); return ; break;
  51. case :
  52. printf("Enter index and nuumber: ");
  53. scanf("%d %d", &index, &number);
  54. insertSeqList(sl, index, number);
  55. break;
  56. case :
  57. printf("Enter index: ");
  58. scanf("%d", &index);
  59. deleteSeqList(sl, index);
  60. break;
  61. case :
  62. printf("Enter number: ");
  63. scanf("%d", &number);
  64. printf("index: %d\n", locateSeqList(sl, number));
  65. break;
  66. case :
  67. traverseSeqList(sl);
  68. break;
  69. case :
  70. printf("Enter number: ");
  71. scanf("%d", &number);
  72. fillSeqList(sl, number);
  73. break;
  74. case :
  75. sortSeqList(sl, true);
  76. break;
  77. case :
  78. sortSeqList(sl, false);
  79. break;
  80. }
  81. }
  82.  
  83. return ;
  84. }
  85.  
  86. /* 顺序表函数实现*/
  87. /* 初始化顺序表 */
  88. SeqList *initSeqList(){
  89. SeqList *sl = (SeqList*)malloc(sizeof(SeqList));
  90. sl->last = -;
  91. return sl;
  92. }
  93. /* 顺序表的插入 */
  94. int insertSeqList(SeqList *sl, int index, int num){
  95. /* 查看是否顺序表已满 */
  96. if(sl->last==MAXSIZE-){
  97. printf("Sorry, there's no room left in sequence list.\n");
  98. return -;
  99. }
  100. /* 检查插入位置是否合理 */
  101. if(index < || index > MAXSIZE-){
  102. printf("Sorry, wrong position.\n");
  103. return ;
  104. }
  105. /* 插入数据 */
  106. /* 从尾巴开始往前遍历,将index位置(包括index)后面所有元素往后移动一位 */
  107. /* 空出index位置插入num */
  108. for(int i = sl->last; i >= index; i--){
  109. sl->data[i+] = sl->data[i];
  110. }
  111. sl->data[index] = num;
  112. /* 如果last比index大,说明last还是指向最后一位,加一即可 */
  113. /* 反之,则说明last在index前面,需要将last指向index */
  114. if(sl->last>index){
  115. sl->last++;
  116. }else{
  117. sl->last = index;
  118. }
  119.  
  120. return ;
  121. }
  122. /* 删除顺序表元素 */
  123. int deleteSeqList(SeqList *sl, int index){
  124. /* 检查是否为空 */
  125. if(sl->last==-){
  126. printf("Sorry, sequence list is empty.\n");
  127. return ;
  128. }
  129. /* 检查是否在0-L->last范围内 */
  130. if(index < || index > sl->last+){
  131. printf("Sorry, index overflow error!\n");
  132. return -;
  133. }
  134. /* 删除数据 */
  135. /* 从头到尾遍历,找到index,将其后面的所有元素往上提,last-- */
  136. for(int i = index; i < sl->last; i++){
  137. sl->data[i] = sl->data[i+];
  138. }
  139. sl->last--;
  140.  
  141. return ;
  142. }
  143. /* 按值查找顺序表元素 */
  144. int locateSeqList(SeqList *sl, int num){
  145. for(int i = ; i <= sl->last; i++){
  146. if(sl->data[i]==num)
  147. return i;
  148. }
  149. return -;
  150. }
  151. /* 遍历顺序表 */
  152. void traverseSeqList(SeqList *sl){
  153. for(int i = ; i <= sl->last; i++){
  154. printf("%d -> ", sl->data[i]);
  155. }
  156. printf("NULL\n");
  157. }
  158. /* 用num填充顺序表 */
  159. void fillSeqList(SeqList *sl, int num){
  160. for(int i = ; i < MAXSIZE; i++){
  161. sl->data[i] = num;
  162. sl->last = MAXSIZE-;
  163. }
  164. }
  165. /* 排序顺序表 */
  166. void sortSeqList(SeqList *sl, bool ascend){
  167. for(int i = ; i < sl->last; i++){
  168. for(int j = i+; j <= sl->last; j++){
  169. if(ascend){
  170. if(sl->data[i]>sl->data[j]){
  171. sl->data[i] ^= sl->data[j];
  172. sl->data[j] ^= sl->data[i];
  173. sl->data[i] ^= sl->data[j];
  174. }
  175. }else{
  176. if(sl->data[i]<sl->data[j]){
  177. sl->data[i] ^= sl->data[j];
  178. sl->data[j] ^= sl->data[i];
  179. sl->data[i] ^= sl->data[j];
  180. }
  181. }
  182. }
  183. }
  184. }

数据结构——顺序表(sequence list)的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. hrbust-1545-基础数据结构——顺序表(2)

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...

  3. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  4. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  5. 数据结构---顺序表(C++)

    顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...

  6. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

  7. python算法与数据结构-顺序表(37)

    1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...

  8. 数据结构顺序表中Sqlist *L,&L,Sqlist *&L

    //定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...

  9. Java数据结构——顺序表

    一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...

随机推荐

  1. QMap::remove操作,并不会调用值的析构,跟QTreeWidget同类,需要主动去释放

    void test_MapRemvoe() { DBOperator * painter = new DBOperator; QMap<int , DBOperator*> map; ma ...

  2. win10 x64 VS2017 PJSIP 视频通话编译流程

    win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...

  3. 物联网架构成长之路(40)-Bladex开发框架入门

    0. 前言 前一小节,讲了如何入门,这里就简单讲一下如何自定义查询和权限控制配置. 1. 配置多租户 如果要启用该表的多租户功能,需要在application.yml 这里配置. 2. 配置模糊匹配 ...

  4. MSM8909中LK阶段LCM屏适配与显示流程分析(二)

    1.前言 在前面的文章MSM8909中LK阶段LCM屏适配与显示流程分析(一),链接如下: https://www.cnblogs.com/Cqlismy/p/12019317.html 介绍了如何使 ...

  5. Vue router-link路由不同的写法,不一样的效果

    我想要的路径:http://localhost:8080/#/main/hato/realtime/eventDetail/238 情况一:未进行路由配置:  {      path: 'eventD ...

  6. 【前端知识体系-JS相关】虚拟DOM和Diff算法

    1.介绍一下vdom? virtual dom, 虚拟DOM 使用JS来模拟DOM结构 DOM变化的对比,放在JS层来做(图灵完备语言),提高效率 DOM操作非常昂贵(消耗性能) 2.Snabbdom ...

  7. 发布TS类型文件到npm

    最近发布了@types/node-observer包到npm,这里记录下发布过程 TS类型文件的包名通常以@types开头,使用npm publish发布以@types开头的包时需要使用付费账号.   ...

  8. Linux iSCSI 磁盘共享管理

    Linux iSCSI 磁盘共享管理 iSCSI 服务是通过服务端(target)与客户端(initiator)的形式来提供服务.iSCSI 服务端用于存放存储源的服务器,将磁盘空间共享给客户使用,客 ...

  9. Microsoft.Extensions.DependencyInjection 之一:解析实现

    [TOC] 前言 项目使用了 Microsoft.Extensions.DependencyInjection 2.x 版本,遇到第2次请求时非常高的内存占用情况,于是作了调查,本文对 3.0 版本仍 ...

  10. java架构之路-(nginx使用详解)nginx的反向代理和优化配置

    书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连 ...