当前位置:编程学习 > C/C++ >>

线性表的顺序表示和实现

线性表是最常用且最简单的一种数据结构,一个线性表是 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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,