完整版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100

typedef struct SqList {
int data[MAX_SIZE];
int length;
}SqList;

//1.构造空的线性表
void InitList (SqList** L)
{
(*L) = (SqList*)malloc(sizeof(SqList));
(*L) -> length = 0;
}

//2.销毁线性表
void DestroyList (SqList** L)
{
free(*L);
*L = NULL;
}


//3.判断线性表是否为空
int ListSpmty (SqList* L)
{
return L -> length == 0;
}

//4.返回元素个数
int ListLength (SqList* L)
{
return L -> length;
}

//5.打印元素数据
void DispList (SqList* L)
{
for(int i = 0; i < L -> length; i++)
{
printf("%d ",L -> data[i]);
}
printf("\n");
}

//6.返回第i个元素的数据
int GetElem (SqList* L, int loc, int* e)
{
if (loc < 0 || loc > L -> length)
{
return 0;
}
*e = L -> data[loc-1];
return 1;
}

//7.判断位序
int LocateElem (SqList* L,int val)
{
for(int i = 0; i < L -> length; i++)
{
if (L -> data[i] == val)
{
return i+1;
}
}
return 0;
}

//8.插入数据
int ListSert(SqList* L, int loc, int val)
{
if (loc <= 0 || loc > L -> length + 1 || L ->length == MAX_SIZE)
return 0;
for(int i = L -> length ; i >= loc; i++)
{
L -> data[i] = L -> data[i-1];
}
L -> data[loc-1] = val;
L -> length++;
return 1;
}


//9.删除数据
int ListDelete(SqList* L, int loc, int* m)
{
if (loc <= 0 || loc > L -> length + 1)
return 0;
int j=0;
for(int i = 0 ; i < L -> length; i++)
{
if(i != loc)
{
L -> data[j++] = L ->data[i];
}
else
{
*m = L -> data[i];
}
}
L -> length--;
return 1;
}

int main ()
{
SqList* list;

//1生成空表 1
InitList(&list);

//2插入数据 1
int num[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++)
{
ListSert(list, i+1, num[i]);
}

//3打印 1
DispList(list);

//4删除数据 1
// int m;
// if(ListDelete(list, 2, &m))
// {
// printf("被删除的数据:%d\n", m);
// printf("当前线性表为:");
// DispList(list);
// }

//5判断是否为空表 1
// if (ListSpmty(list))
// {
// printf("空表\n");
// }
// else
// {
// printf("非空\n");
// }

//6打印元素个数 1
// printf("有%d个元素\n",ListLength(list));

//7返回第i个数数据 1
// int e;
// if (GetElem(list, 3, &e))
// {
// printf("e:%d\n",e);
// }

//8判断位序 1
// int w = LocateElem(list, 3);
// printf("%d\n",w);

//9销毁表 1
// DestroyList(&list);
// if(list==NULL)
// {
// printf("1\n");
// }
system("pause");
return 0;
}

功能实现

1.构造空的线性表

1
2
3
4
5
void InitList (SqList** L)
{
(*L) = (SqList*)malloc(sizeof(SqList));
(*L) -> length = 0;
}

2.销毁线性表

1
2
3
4
5
void DestroyList (SqList** L)
{
free(*L);
*L = NULL;
}

3.判断线性表是否为空

1
2
3
4
int ListSpmty (SqList* L)
{
return L -> length == 0;
}`

4.返回元素个数

1
2
3
4
int ListLength (SqList* L)
{
return L -> length;
}

5.打印元素数据

1
2
3
4
5
6
7
8
void DispList (SqList* L)
{
for(int i = 0; i < L -> length; i++)
{
printf("%d ",L -> data[i]);
}
printf("\n");
}

6.返回第i个元素的数据

1
2
3
4
5
6
7
8
9
int GetElem (SqList* L, int loc, int* e)
{
if (loc < 0 || loc > L -> length)
{
return 0;
}
*e = L -> data[loc-1];
return 1;
}

7.判断位序

1
2
3
4
5
6
7
8
9
10
11
int LocateElem (SqList* L,int val)
{
for(int i = 0; i < L -> length; i++)
{
if (L -> data[i] == val)
{
return i+1;
}
}
return 0;
}

8.插入数据

1
2
3
4
5
6
7
8
9
10
11
12
int ListSert(SqList* L, int loc, int val)
{
if (loc <= 0 || loc > L -> length + 1 || L ->length == MAX_SIZE)
return 0;
for(int i = L -> length ; i >= loc; i++)
{
L -> data[i] = L -> data[i-1];
}
L -> data[loc-1] = val;
L -> length++;
return 1;
}

9.删除数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ListDelete(SqList* L, int loc, int* m)
{
if (loc <= 0 || loc > L -> length + 1)
return 0;
int j=0;
for(int i = 0 ; i < L -> length; i++)
{
if(i != loc)
{
L -> data[j++] = L ->data[i];
}
else
{
*m = L -> data[i];
}
}
L -> length--;
return 1;
}