线性表的顺序表示和实现
线性表是最常用且最简单的一种数据结构,一个线性表是 N 个数据元素的有限序列。
顺序表存储结构能够容易的实现随机存取线性表中的第 i 个数据元素,但是插入和删除表中的数据元素时,需要移动大量的数据元素。
因此,顺序表存储结构适用于数据相对稳定的线性表。
环境:eclipse,MinGW 5.1.4
File : list.h
1 /**
2 * =================================
3 * @描述: List 头文件
4 * @作者: fancy
5 * @日期: 2012-11-02
6 * @联系: fancydeepin@yeah.net
7 * =================================
8 */
9
10 #include <stdio.h>
11 #include <malloc.h>
12
13 typedef int Data;
14 typedef int Status;
15 #define OK 1
16 #define NO 0
17 #define YES 1
18 #define ERROR 0
19 #define OVERFLOW -1
20 #define OutOfBound -1
21 #define LIST_INIT_SIZE 25
22 #define LIST_INCREMENT_COUNT 15
23
24 //线性表结构
25 struct List {
26 int size; //线性表长度大小
27 int count; //线性表元素计数
28 Data *data; //数据元素
29 };
30
31 /**
32 * 描述: 初始化线性表
33 * 参数: &L 线性表
34 * 参数: length 长度
35 * 返回: ERROR/OK
36 */
37 Status initList(List &L, int length){
38
39 L.data = (Data*)malloc(length * sizeof(Data));
40 if(!L.data){
41 return ERROR;
42 }
43 L.count = 0;
44 L.size = length;
45 return OK;
46 }
47
48 /**
49 * 描述: 初始化线性表
50 * 参数: &L 线性表
51 * 返回: ERROR/OK
52 */
53 Status initList(List &L){
54
55 return initList(L, LIST_INIT_SIZE);
56 }
57
58 /**
59 * 描述: 创建指定长度大小的线性表
60 * 参数: size 长度
61 * 返回: List
62 */
63 List newList(int size){
64
65 List L;
66 if(initList(L, size) == OK){
67 return L;
68 }
69 exit(ERROR);
70 }
71
72 /**
73 * 描述: 创建线性表
74 * 返回: List
75 */
76 List newList(){
77
78 return newList(LIST_INIT_SIZE);
79 }
80
81 /**
82 * 描述: 判断线性表是否为空
83 * 参数: &L 线性表
84 * 返回: YES/NO
85 */
86 Status isEmptyList(List &L){
87
88 if(!L.data){
89 return YES;
90 }
91 return NO;
92 }
93
94 /**
95 * 描述: 将数据存储到线性表中的index位置
96 * 参数: &L 线性表
97 * 参数: data 数据
98 * 返回: ERROR/OK
99 */
100 Status putValue(List &L, int index, Data data){
101
102 if(!isEmptyList(L) && index >= 0 && index < L.size){
103 Data *p = L.data + index * sizeof(Data);
104 if(index >= L.count){
105 L.count++;
106 }
107 *p = data;
108 return OK;
109 }
110 return ERROR;
111 }
112
113 /**
114 * 描述: 将数据存储到线性表
115 * 参数: &L 线性表
116 * 参数: data 数据
117 * 返回: ERROR/OK
118 */
119 Status putValue(List &L, Data data){
120
121 if(!isEmptyList(L)){
122 if(L.count >= L.size){
123 Data *p = (Data*)realloc(L.data, (L.size + LIST_INCREMENT_COUNT) * sizeof(Data));
124 if(!p){
125 return ERROR;
126 }else{
127 L.data = p;
128 L.size += LIST_INCREMENT_COUNT;
129 }
130 }
131 *(L.data + L.count * sizeof(Data)) = data;
132 L.count++;
133 return OK;
134 }
135 return ERROR;
136 }
137
138 /**
139 * 描述: 将数据存储到线性表
140 * 参数: &L 线性表
141 * 参数: data 数据元素基址
142 * 参数: count 数据总计数
143 * 返回: ERROR/OK
144 */
145 Status putAll(List &L, Data *data, int count){
146
147 for(int i = 0; i < count; i++){
148 putValue(L, data[i]);
149 }
150 return OK;
151 }
152
153 /**
154 * 描述: 获取线性表中下标为index的值
155 * 参数: &L 线性表
156 * 参数: index 数据元素下标索引值
157 * 返回: Data
158 */
159 Data getValue(List &L, int index){
160
161 if(index < 0 || index > L.count){
162 return OutOfBound;
163 }else{
164 return *(L.data + index * sizeof(Data));
165 }
166 }
167
168 /**
169 * 描述: 获取线性表中下标为index的值,并存储到value中
170&
补充:软件开发 , C++ ,