1. #define OK 1
  2. #define ERROR 0
  3. #define OVERFLOW -2
  4. #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
  5. #define List_Increment 10 //线性表存储空间的分配增量
  6. #include<stdio.h>
  7. #include<string.h>
  8. #include<stdlib.h>
  9.  
  10. typedef struct{
  11.  
  12. int *elem; //存储空间的基地址
  13. int length;
  14. int listsize; //定义的一个大小
  15.  
  16. }SqList; //申请结构体变量SqList ,SqList作为类型可以声明新的结构体变量,如:SqList l,m[34],*n;
  17.  
  18. //初始化 (构造空的线性表)
  19. InitList_Sq(SqList &L)
  20. {
  21. L.elem=(int *)malloc(LIST_INIT_SIZE * sizeof(int)); //存储空间的元素空间大小
  22. if(!L.elem)exit(OVERFLOW); // 若没有表,则返回overflow
  23. L.length=;
  24. L.listsize= LIST_INIT_SIZE;
  25. printf("------------------申请空间成功----------------\n");
  26. return OK;
  27. }
  28. struct GetElem_Sq(SqList&L,int i, int &e){ //查找元素
  29.  
  30. printf("请输入查找位置:");
  31. scanf("%d",&i);
  32. if(i< || i>L.length) { //判断查找元素是否在申请空间内
  33. printf("元素不在空间位置内!!\n\n");
  34. return ERROR;
  35. }
  36. e=L.elem[i-]; // 逐个查找元素
  37. printf("查找的元素为:%d\n\n",e);
  38. return OK;
  39.  
  40. };
  41.  
  42. //在i位置插入元素
  43. ListInsert_Sq(SqList&L,int i,int e){
  44. int *p,*q;
  45. printf("请输入插入位置:");
  46. scanf("%d",&i);
  47. printf("插入数据:");
  48. scanf("%d",&e);
  49. if(i<||i>L.length+){
  50. printf("插入位置不在顺序空间内!!!\n\n"); // 如果i值不合法(没有在申请空间内)则返回0
  51. return ERROR;
  52. }
  53. if(L.length>=L.listsize){ //如果存储空间已满,则增加分配容量
  54. int* newbase=(int*)realloc(L.elem,(L.listsize+List_Increment)*sizeof(int)); //再次申请空间
  55. if(newbase==NULL)
  56. printf("存储空间分配失败\n\n"); //存储空间分配失败
  57. L.elem=newbase; //新的基地址
  58. L.listsize=L.listsize+List_Increment; //容量增加
  59. }
  60. q=&L.elem[i-]; //e元素在i处插入
  61. for(p=&(L.elem[L.length-]);p>=q;--p) //元素值整体后移
  62. *(p+)=*p;
  63. *q=e; //插入e元素
  64. ++L.length; //表长加一
  65. return OK;
  66. }
  67.  
  68. ListDelete_Sq(SqList&L,int i,int &e){ // 删除列表中某个位置的元素
  69. int *p,*q;
  70. printf("请选出删除元素位置:");
  71. scanf("%d",&i);
  72. if(i< || i>L.length){ // 判断删除位置是否在存储空间内
  73. printf("删除位置不在空间内!!!\n\n");
  74. return ERROR;
  75. }
  76. p=&(L.elem[i-]); //p为被删除的元素
  77. e=*p;
  78. printf("删除值为:%d\n\n",e);
  79. q=L.elem+L.length-; // 表长减一
  80. for(++p;p<=q;p++) //删除元素后 后继元素整体前移
  81. *(p-)=*p;
  82. --L.length;
  83. return OK;
  84.  
  85. }
  86.  
  87. int creatnewlist(SqList &L) //创建列表
  88. {
  89. int i,n;
  90. printf("\n\n请用户先存入数据\n\n请选择存入数据个数:");
  91. scanf("%d",&n);
  92. while(n<=){
  93. printf("\n数据个数小于‘1’\n请重新存入数据个数:");
  94. scanf("%d",&n);
  95. }
  96. printf("请输入%d个数据:\n",n);
  97. if(n>LIST_INIT_SIZE){
  98. L.elem=(int *)realloc(L.elem,(n+List_Increment)*sizeof(int)); //再次申请空间
  99. if(!L.elem)exit(OVERFLOW); //如果没有列表 则返回overflow 0
  100. L.listsize=n+List_Increment;
  101. }
  102. for(i=;i<n;i++) //将元素逐一写入列表
  103. // printf("-----------\n");
  104. scanf("%d",L.elem+i);
  105. L.length=n;
  106. return OK;
  107. }
  108. // 逐一打印列表中的元素
  109. int pr(SqList &L){
  110. int i;
  111. if(L.length<){
  112. printf("列表为空!!\n\n");
  113. }else{
  114. for(i=;i<L.length;i++){
  115. printf("表中元素第%d个元素为:%d\n\n",i,*(L.elem+i));
  116.  
  117. }
  118.  
  119. }
  120. return OK;
  121. }
  122. void ClearList(SqList &L){ //释放已经申请的空间
  123.  
  124. free(L.elem);
  125. printf("释放空间成功!!\n\n");
  126. InitList_Sq(L); //调用 InitList_Sq() 创建空的线性表
  127. creatnewlist(L); //调用 createnewlist()建立新的列表
  128. }
  129.  
  130. void OperateMenu(){ //操作菜单
  131.  
  132. printf("--------------元素处理方式---------\n\n");
  133. printf("0> 退出\n\n");
  134. printf("1>: 查找给定位置的数据\n\n");
  135. printf("2>: 插入元素\n\n");
  136. printf("3>: 删除元素\n\n");
  137. printf("4>: 打印元素\n\n");
  138. printf("5>: 释放原列表,创建新列表\n\n");
  139. printf("请选择对元素的处理:");
  140.  
  141. }
  142.  
  143. void main(){
  144. int i=,e=,k,boo=,w=;
  145. SqList L; //声明
  146. printf("注:此测试过程输入值应全为数字\n\n");
  147. printf("请用户选择存入数据或退出程序:\n\n");
  148. printf("存入数据请输入:'1'\n\n");
  149. printf("退出请选择'0'或 其它!!\n\n");
  150. printf("请选择:");
  151. scanf("%d",&w);
  152. if(w==){
  153. InitList_Sq(L); //调用 InitList_Sq() 创建空的线性表
  154. creatnewlist(L); //调用 createnewlist()建立新的列表
  155. OperateMenu(); //指令导向
  156. scanf("%d",&k);
  157. while(k){
  158. switch (k)
  159. {
  160. case :break;
  161. case :boo=GetElem_Sq(L,i,e);
  162. if(boo)
  163. printf("查询成功!!\n\n");
  164. else
  165. printf("查询失败!!\n\n");
  166. break;
  167. case :boo=ListInsert_Sq(L,i,e);
  168. if(boo)
  169. printf("插入成功!!\n\n");
  170. else
  171. printf("插入失败!!\n\n");
  172. break;
  173. case :boo=ListDelete_Sq(L,i,e);
  174. if(boo)
  175. printf("删除成功!!\n\n");
  176. else
  177. printf("删除失败!!\n\n");
  178. break;
  179. case :pr(L);
  180. break;
  181. case :ClearList(L);break;
  182. }
  183. OperateMenu();
  184. scanf("%d",&k);
  185. }
  186. }else{
  187. exit(OVERFLOW);
  188. }
  189.  
  190. }

c_数据结构_顺序表的更多相关文章

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

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

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. cb03a_c++_数据结构_顺序容器_STL_stack

    /*cb03a_c++_数据结构_顺序容器_STL_stack堆栈:LIFO--Last In First Out后进先出,用于系统程序设计自适应容器(容器适配器),不是独立的容器,是一个适配器栈适配 ...

  4. cb02a_c++_数据结构_顺序容器_STL_list类_双向链表

    /*cb02a_c++_数据结构_顺序容器_STL_list类_双向链表实例化std::list对象在list开头插入元素在list末尾插入元素在list中间插入元素,插入时间恒定,非常快.数组:中间 ...

  5. cb01a_c++_数据结构_顺序容器_STL_deque类

    /*cb01a_c++_数据结构_顺序容器_STL_deque类deque是一个动态数组,比vector更加灵活.两者都属于动态数组deque与vector非常类似deque可以在数组开头和末尾插入和 ...

  6. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  7. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  8. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  9. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

随机推荐

  1. BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块

    作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...

  2. java 批量插入 Oracle

    sql = "INSERT INTO LOG_FILENAME(ID,FILENAME,CREATETIME) VALUES(2,?,sysdate)"; public void  ...

  3. 前端-----margin用法(盒子模型里补充)

    margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...

  4. python 前面几个单词含义

    切片 str[start:end:step] start:从xxx开始    (startswith) end:切到xxx为止  (endswith) 不包括 字符串操作 .capitalize()# ...

  5. android7.0以上使用融云即使通讯的坑

    一.连接服务器不走connect()方法 在android6.0以下,在使用融云sdk时,直接将依赖库引入到项目中即可.但是在7.0及以上时,直接应用会发现消息一直发送不出去,错误提示为dlopen ...

  6. winform数据存储的方式

    存储的方式有三种: 一.SQL数据库 二.Access(office 2007版本以上是需要安装驱动的) 三.XML

  7. swift 实践- 04 -- UIButton

    import UIKit class ViewController: UIViewController { // 按钮的创建 // UIButtonType.system: 前面不带图标, 默认文字为 ...

  8. 查看MySQL版本的命令及常用命令

    Windows / Linux 系统 前提是已经正确安装了 MySQL,打开 Windows 系统中的命令行工具(Win + R --> 输入 cmd 并按下回车键)--> 输入命令: m ...

  9. Mac配置Jdk 安装及系统环境配置

    注:本文来于<  Mac配置Java开发环境    > 1. 下载JDK 从下面链接选择合适版本的安装包进行下载...笔者下载的是jdk-9.0.1 链接:http://www.oracl ...

  10. Linux永久修改IP地址

    通常我们为了快速修改IP地址,会这么做 ifconfig eth0 192.168.0.2 netmask 255.255.255.0 这样修改IP地址后,你再运行ifconfig命令后,的确IP地址 ...