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. Mudo C++网络库第十一章学习笔记

    反思C++面向对象与虚函数 C++语言学习可以看<C++ Primer>这本书; 在C++中进行面向对象编程会遇到其他语言中不存在的问题, 其本质原因是C++ class是值语义, 而非对 ...

  2. MySQL(介绍,安装,密码操作,权限表)

    一.数据库介绍1.数据库相关概念 a.支持并发     b.锁的问题     c.对客户端请求进行认证     d.存取效率(降低IO次数)    数据库服务器(本质就是一个台计算机,该计算机之上安装 ...

  3. laravel sql复杂语句,原生写法----连表分组

    ### 使用了临时表.又分组又连表的感觉好难写,使用拉 ravel 但是现在越来也相信,没解决一个新的难题,自己又进步了一点点 ### 原生的sql: select user_code, realna ...

  4. VUE 数据请求和响应(axios)

    1. 概述 1.1 简介 axios是一个基于Promise(本机支持ES6 Promise实现) 的HTTP库,用于浏览器和 nodejs 的 HTTP 客户端.具有以下特征: 从浏览器中创建 XM ...

  5. Codeforces 1107G Vasya and Maximum Profit [单调栈]

    洛谷 Codeforces 我竟然能在有生之年踩标算. 思路 首先考虑暴力:枚举左右端点直接计算. 考虑记录\(sum_x=\sum_{i=1}^x c_i\),设选\([l,r]\)时那个奇怪东西的 ...

  6. TIMESTAMPN(N) WITH LOCAL TIMEZONE数据类型转换

    --TYPE#=231为TIMESTAMP(N) WITH LOCAL TIME ZONE,181为TIMESTAMP(N) WITH TIME ZONEselect u.name || '.' || ...

  7. 手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间(转)

    转载地址:https://www.cnblogs.com/xzzzys/p/7526761.html 1  用定位为题来解决var oHeight = $(document).height(); // ...

  8. linq基本操作

    一.Linq有两种语法: 1.  方法语法 2.  查询语法 下面举个例子看看这两种方法的区别 比如现在有一个学生类 public class student { public string user ...

  9. socket-WebSocket HttpListener TcpListener 服务端客户端的具体使用案例

    /// <summary>/// 启动服务监听的ip和端口的主线程/// </summary>/// <param name="tunnelPort" ...

  10. Confluence 6 PostgreSQL 输入你的数据库细节

    在 Confluence 的设置安装向导中,将会指导你 Confluence 如何连接到你的数据库.请确定选择 "My own database". 使用 JDBC 连接(默认) ...