1 /*
2 * 一、数据结构基础之顺序表
3 * 顺序表数据结构(结构的定义+在此结构上的操作)
4 * --- 2012年4月21日 ---by lee
5 */
6
7 #ifndef _SEQUENTIAL_LIST_H
8 #define _SEQUENTIAL_LIST_H
9
10 #include "Utility.h"
11
12 //宏定义顺序表的空间大小
13 #define LISTSIZE 20
14
15 //类型定义
16 typedef int DataType;
17
18 //声明顺序表类型结构体
19 typedef struct _SqList
20 {
21 DataType data[LISTSIZE];//存放数据元素的数组
22 int length;//记录顺序表的实际长度
23 } SqList;
24
25 //对顺序表的基本操作
26 void InitList(SqList* list);//初始化顺序表
27 int GetLength(SqList* list);//获得当前顺序表的长度
28 DataType GetElement(SqList* list, int index);//返回表中位于位置index处的元素值(index从0到Length-1)
29 void InsertElement(SqList* list, int index, DataType e);//在表中位置index处插入值为e的元素
30 void DeleteElement(SqList* list, int index);//删除表中位置index处的元素
31 void PrintList(SqList* list);//打印顺序表中的元素
32
33
34 //初始化顺序表
35 void InitList(SqList* list)
36 {
37 list->length=0;
38 }
39
40 //获得当前顺序表的长度
41 int GetLength(SqList* list)
42 {
43 return list->length;
44 }
45
46 //返回表中位于位置index处的元素值(index从0到Length-1)
47 DataType GetElement(SqList* list, int index)
48 {
49 if((index < 0) || (index > list->length-1))
50 Error("Array Index Out Of Bounds");
51 return list->data[index];
52 }
53
54 //在表中位置index处插入值为e的元素(index从0到Length为合法位置)
55 void InsertElement(SqList* list, int index, DataType e)
56 {
57 //检查插入位置是否合法
58 if((index < 0) || (index > list->length))
59 Error("Illegal Inserted Position");
60 //检查表空间是否已满
61 if(list->length >= LISTSIZE)
62 Error("Array Space Is Full");
63
64 //当在位置length处插入e时(即数组末尾下一位),无需移动任何元素
65 //当在位置index处插入时(index<length),从index~length-1的元素全部后移一位
66 for(int i=list->length-1; i>=index; i--)
67 {
68 list->data[i+1]=list->data[i];
69 }
70 //在位置index处插入元素e
71 list->data[index]=e;
72 //更新顺序表长度
73 list->length++;
74 }
75
76 //删除表中位置index处的元素(index从0到Length-1)
77 void DeleteElement(SqList* list, int index)
78 {
79 //检查删除位置是否合法
80 if((index < 0) || (index > list->length-1))
81 Error("Illegal deleted Position");
82
83 //当在位置length-1处删除e时(即数组末尾),无需移动任何元素
84 //当在位置index处删除时(index<length-1),从index+1~length-1的元素全部前移一位
85 for(int i=index; i<list->length-1; i++)
86 {
87 list->data[i]=list->data[i+1];
88 }
89 //更新表长度
90 list->length--;
91 }
92
93 //打印顺序表中的元素
94 void PrintList(SqList* list)
95 {
96 for(int i=0; i<list->length; i++)
97 {
98 printf("%d\t",list->data[i]);
99 }
100 printf("\n");
101 }
102
103 #endif
104
105 //测试代码
106 /*
107 SqList* list=(SqList*)malloc(sizeof(SqList));
108 InitList(list);
109 InsertElement(list,0,1);
110 InsertElement(list,1,2);
111 InsertElement(list,2,3);
112 InsertElement(list,3,4);
113 InsertElement(list,4,5);
114 InsertElement(list,5,6);
115 PrintList(list);
116 DeleteElement(list,3);
117 PrintList(list);
118 printf("%d\n",GetElement(list,1));
119 DeleteElement(list,6);
120 */