1 #include <stdio.h>
2 #include <malloc.h>
3 #define bool int
4 #define True 1
5 #define False 0
6 #define ERROR -1
7 #define SIZE 100
8 /*
9 1、初始化线性表
10 2、删除线性表
11 3、判定是否为空表
12 4、线性表长度
13 5、输出线性表全部元素
14 6、按元素位置查找
15 7、按元素值查找
16 8、插入
17 9、删除
18 10、在末尾添加值
19 11、删除末位置
20 */
21 typedef struct {
22 int data[SIZE];
23 int length;
24 } seq_list;
25
26 // 初始化
27 void init_list(seq_list* list)
28 {
29 // 分配存储线性表的空间
30 list->data = (seq_list*)malloc(sizeof(seq_list));
31 list->length = 0;
32 }
33
34 // 销毁线性表
35 void destroy_list(seq_list* list)
36 {
37 free(list);
38 }
39
40 // 判断是否为空表
41 bool list_empty(seq_list* list)
42 {
43 // 是空表返回 1, 不是0
44 return (list->length == 0);
45 }
46
47 // 线性表长度
48 int list_length(seq_list* list)
49 {
50 return (list->length);
51 }
52
53 // 输出线性表
54 void disp_list(seq_list* list)
55 {
56 int i;
57 for (i=0; i<length; i++){
58 printf("%d", list->data[i]);
59 }
60 printf("
");
61 }
62
63 // key 位置元素
64 int get_elem(seq_list* list, int key)
65 {
66 int value = ERROR;
67 if (-1 < key && key < list->length){
68 n = list->data[key];
69 }
70 return n;
71 }
72
73 // 按值查找, 返回位置
74 int locate_elem(seq_list* list, int value)
75 {
76 int key = -1;
77 int i;
78 for (i=0; i<list->length; i++){
79 if (list->data[i] == value){
80 key = i;
81 break;
82 }
83 }
84 return key;
85 }
86
87 // 插入 value 到 key 位置
88 bool list_insert(seq_list* list, int value, int key)
89 {
90 bool n = False;
91 int i;
92 // 表未满, 位置合法, 才可插入
93 if ((list->length < SIZE) && (-1 < key && key < list->length)){
94 for (i=list->length; i != key; i--){
95 list->data[i+1] = list->data[i]
96 }
97 list->data[key] = value;
98 n = True;
99 list->length++;
100 }
101
102 return n;
103 }
104
105 // 删除 key 位置元素
106 bool list_delete(seq_list* list, int key){
107 int i;
108 bool n = False;
109 if (-1 < key && key < list->length){
110 for (i=key; i<list->length-1; i++){
111 list->data[i] = list->data[i+1];
112 }
113 list->length--;
114 }
115
116 return n;
117 }
118
119 // 追加元素
120 bool list_append(seq_list* list, int value)
121 {
122 bool n = Flase;
123 // 表未满, 就可以追加
124 if (list->length < SIZE){
125 list->data[list->length] = value;
126 list->length++;
127 n = True;
128 }
129
130 return n;
131 }
132
133 // 删除末尾元素
134 bool list_pop(seq_list* list)
135 {
136 bool n = Flase;
137 if (list->length != 0){
138 list->length--;
139 }
140 }