数据结构-线性表的顺序结构
1 #include "stdio.h" 2 #include "stdlib.h" 3 4 typedef int ElemType; //线性表存储基本类型 5 typedef int Status; //基本操作函数类型 6 #define LIST_INT_SIZE 50 //线性表初始化存储空间分配量 7 #define LISTINCREMENT 10 //线性表存储空间分配量增值 8 #define OK 1 9 #define ERROR 0 10 11 typedef struct 12 { 13 ElemType *elem; //存储空间基址 14 int length; //当前长度 15 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) 16 }SqList; 17 18 //构建一个空的线性表 19 Status InitList(SqList &L) 20 { 21 L.elem = (ElemType *)malloc(LIST_INT_SIZE * sizeof(ElemType)); 22 if(!L.elem) //如果初始化失败返回ERROR 23 return ERROR; 24 L.length = 0; //空表长度为0 25 L.listsize = LIST_INT_SIZE; //初始存储容量 26 return OK; 27 }//InitLise 28 29 //销毁线性表L 30 Status DestroyList(SqList &L) 31 { 32 free(L.elem); //收回空间 33 L.elem = NULL; //基址指向NULL 34 L.length = 0; //长度变0 35 L.listsize = 0; //清除存储容量 36 return OK; 37 }//DestroyList 38 39 //重置线性表L为空表 40 bool ClearList(SqList &L) 41 { 42 L.length = 0; 43 return OK; 44 }//ClearList 45 46 //查看线性表是否为空表 47 Status ListEmpty(SqList L) 48 { 49 if(L.length == 0) 50 return OK; 51 else 52 return ERROR; 53 }//ListEmpty 54 55 //查看线性表的元素个数 56 int ListLength(SqList L) 57 { 58 return L.length; //返回长度 59 }//ListLength 60 61 //用e返回第i个数据元素的值 62 Status GetElem(SqList L, int i, ElemType &e) 63 { 64 if(i < 1 || i > L.length) //判断i值是否合法 65 return ERROR; 66 e = L.elem[i-1]; //赋值第i个元素值 67 return OK; 68 }//GetElem 69 70 //返回L中第一个与e满足关系compare()的数据元素 71 //若这样的数据元素不存在则返回0 72 int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType,ElemType)) 73 { 74 ElemType *p = L.elem; 75 int i = 1; 76 while(i <= L.length && !compare(*p++,e)) 77 ++i; 78 if(i <= L.length) 79 return i; 80 else 81 return -1; 82 }//LocateElem 83 84 //若cur_e是L的数据元素,且不是第一个,则用pre_e返回他的前驱 85 //否则操作是啊比,pre_e无定义 86 Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e) 87 { 88 int i = 2; 89 ElemType *p = L.elem+1; 90 while(i <= L.length && *p != cur_e) 91 { 92 p++; 93 i++; 94 } 95 if(i > L.length) 96 return ERROR; 97 else 98 { 99 pre_e = *--p; 100 return OK; 101 } 102 }//PriorElem 103 104 //若cur_e是L的数据元素,且不是最后一个,则用next_e返回他的后驱 105 //否则操作是啊比,next_e无定义 106 Status NextList(SqList L, ElemType cur_e, ElemType &next_e) 107 { 108 int i = 1; 109 ElemType *p = L.elem; 110 while(i <= L.length && *p != cur_e) 111 { 112 ++p; 113 ++i; 114 } 115 if(i == L.length) 116 return ERROR; 117 else 118 { 119 next_e = *++p; 120 return OK; 121 } 122 }//NextList 123 124 //插入元素 125 Status ListInsert(SqList &L, int i, ElemType e) 126 { 127 if(i < 1 || i > L.length+1) //判断i值是否合法 128 return ERROR; 129 SqList newbase; //用于存储新加元素的位置空间 130 if(L.length >= L.listsize) //当前存储分配已满,增加分配 131 { 132 newbase.elem = (ElemType *)realloc(L.elem, 133 (L.listsize + LISTINCREMENT) * sizeof(ElemType)); 134 if(!newbase.elem) //存储分配失败 135 return ERROR; 136 L.elem = newbase.elem; //新基址 137 L.listsize += LISTINCREMENT; //增加存储容量 138 } 139 ElemType *q = &(L.elem[i-1]); //q指向插入位置 140 for (ElemType *p = &(L.elem[L.length-1]); p >= q; --p) //p指向表尾 141 *(p+1) = *p; //插入位置及之后的元素右移 142 *q = e; //插入元素 143 ++L.length; //表长加一 144 return OK; 145 }//ListInsert 146 147 //删除第几个元素并返回值 148 Status ListDelete(SqList &L, int i, ElemType &e) 149 { 150 if((i < 1) || (i > L.length)) //判断i值是否合法 151 return ERROR; //i值不合法返回失败 152 ElemType *p = &(L.elem[i-1]); //p指向被删除元素的位置 153 e = *p; //返回被删除元素的值 154 ElemType *q = L.elem + L.length - 1; //q指向最后一个元素的位置 155 for (++p; p <= q; ++p) //被删除元素之后的元素左移 156 *(p-1) = *p; 157 --L.length; //当前表长减一 158 return OK; 159 }//ListDelete 160 161 //依次对L的每一个数据元素调用Visit()函数 162 Status ListTraverse(SqList L, void(*Visit)(ElemType*)) 163 { 164 ElemType *p = L.elem; 165 int i; 166 for(i = 1; i <= L.length; i++) 167 Visit(p++); 168 printf("\n"); 169 return OK; 170 }//ListTraverse 171 172 //ListTraverse()调用函数Visit() 173 //Visit函数在这里做输出链表功能 174 void Visit(ElemType *c) 175 { 176 printf("%d",*c); //%d随data类型而变 177 } 178 179 //查找元素 180 int ListLocate(SqList L, ElemType e) 181 { 182 int i = 1; 183 while(i <= L.length) 184 { 185 if (L.elem[i-1] == e) 186 break; 187 i++; 188 } 189 if(i <= L.length) //找到指定元素则返回位置否则返回-1 190 return i; 191 else 192 return -1; 193 }//ListLocate
线性表的顺序表达的13个基本函数。
参考《数据结构(C语言版)》严蔚敏编著
转载于:https://www.cnblogs.com/ABook/p/5370008.html
数据结构-线性表的顺序结构相关推荐
- 数据结构——线性表:顺序表、单向链表、循环链表、双向链表
线性表 是一种数据结构:n个数据元素的有限序列 表示形式: L = (a1,a2...an) a1是线性表的元素,小写. n=0时候为空表 数据元素具有相同特性 相邻元素之间存在序偶关系:即有唯一 ...
- 1-2、数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
学习需要记录,更需要温习! 上一篇我们总结了什么是线性表,线性表的ADT类型,线性表的两种存储类型顺序存储结构和链式存储结构,今天正式进入线性表的顺序存储结构的总结和归纳,也就是数据结构的线性表的顺序 ...
- mysql 线性表_数据结构-线性表之顺序表
线性表 (1)逻辑结构和物理结构 物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里. 逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系 ...
- 数据结构-线性表之顺序表
线性表包括顺序表和链表(单链表.双链表等),这里我们简单探讨一下线性表中顺序表的基本操作和实现. 线性表其实就是对数组的一个实现,其逻辑上和物理存储上的地址都是连续的(数组的下标是从0开始的,而线性表 ...
- 数据结构——线性表:顺序表、单链表、双链表(C++)
内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...
- 数据结构-线性表的顺序存储结构逆置
1.主要的操作是:对顺序存储的线性表进行逆置操作. 2.空表为0时,或超过100个元素时,不执行程序. 自学c语言,有任何问题,还望大佬们指教. 以下是代码: #include <stdio.h ...
- 数据结构二:线性表的顺序结构实现
此程序根据高一凡大神的源程序修改而成. /************************************************************* FileName:c2-1.h F ...
- 线性表之顺序结构单链表
数据结构学习笔记 文章目录 数据结构学习笔记 一.线性表的链式存储结构之单链表 1.单链表存储结构要素 2.实现过程 二.读取操作 1.算法思路 2.算法实现 三.插入操作 1.算法思路 2.算法实现 ...
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
#include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...
最新文章
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
- JVMTOP JVM 监视工具
- 教你几个写出原创文章的小方法
- python操作文件夹-Python文件操作大全,随机删除文件夹内的任意文件
- Windows Server2008下MYSQL外网无法访问问题解决
- 群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!
- 【离散数学】二元关系的闭包
- tf.transpose()函数(转)
- java junit 运行_运行Junit方法项目启动不了
- php js 交互(js调用PHP代码执行)
- 13. Memcache 安装,启动,基本命令,URL
- 11.8 scrum report
- 跨语言调用模块.TXT
- c语言注释部分两侧的分界符号分别是,C语言程序设计基础教程 - 习题答案
- steam加速_《盗贼之海》发行之初荣登Steam榜首,UU加速器为您开黑提供保障
- 云计算时代IT产业六大发展趋势
- 怎样成为优秀的测试工程师
- TypeScript简记
- vim的使用以及vim插件的配置
热门文章
- 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行
- Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
- vim中tab键8空格换4空格
- redis 双写一致性 看一篇成高手系列1
- debian10 Unable to correct problems, you have held broken packages.
- DateGridView列的输出顺序反了
- Distilling the Knowledge in a Neural Network 论文笔记蒸馏
- 华为八爪鱼自动驾驶云
- c++ Factor泛型编程示例
- 使用现代C++如何避免bugs(下)