数据结构实验一:顺序表
实现顺序表的各种基本运算的算法
1 实验目的
领会顺序表存储结构和掌握顺序表中的各种基本运算算法设计。
2 实验内容
编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型 ElemType 为 char),并在此基础上设计一个程序exp2-1.cpp完成以下功能。
- 初始化顺序表L。
- 依次插入a、b、c、d、e元素。
- 输出顺序表L。
- 输出顺序表L的长度。
- 判断顺序表L是否为空。
- 输出顺序表L的第3个元素。
- 输出元素a的位置。
- 在第4个元素位置上插入f元素。
- 输出顺序表L。
- 删除顺序表L的第三个元素。
- 输出顺序表L。
- 释放顺序表L。
3 软件程序
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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MaxSize 20
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
void InitList(SqList * &L)
{
L = (SqList *)malloc(sizeof(SqList));
L->length = 0;
}
bool ListInsert(SqList * &L,int i,ElemType e)
{
int j;
if(i<1 || i>L->length+1 || L->length==MaxSize) return false;
i--;
for (j=L->length;j>i;j--) L->data[j]=L->data[j-1];
L->data[i] = e;
L->length++;
return true;
}
void DispList(SqList *L)
{
for (int i=0;i<L->length;i++) printf("%c",L->data[i]);
printf("\n");
}
int ListLength(SqList *L)
{
return(L->length);
}
bool ListEmpty(SqList *L)
{
return (L->length == 0);
}
bool GetElem(SqList *L,int i,ElemType &e)
{
if(i<1 || i>L->length) return false;
e = L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e)
{
int i = 0;
while(i<L->length && L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
bool ListDelete(SqList * &L,int i,ElemType &e)
{
int j;
if(i<1 || i>L->length)
return false;
i--;
e = L->data[i];
for (j=i;j< L->length-1;j++)
L->data[j]=L->data[j+1];
return true;
}
void DestoryList(SqList * &L)
{
free(L);
}
int main(){
SqList *L;
ElemType e;
printf("(1)初始化线性表\n");
InitList(L);
printf("(2)依次插入 a、b、c、d、e 元素\n");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf("(3)输出顺序表 L\n");
DispList(L);
printf("(4)输出顺序表 L 的长度\n");
printf("%d\n",ListLength(L));
printf("(5)判断顺序表 L 是否为空\n");
if(ListEmpty(L))
printf("顺序表 L 为空\n");
else
printf("顺序表 L 不为空\n");
printf("(6)输出顺序表 L 的第 3 个元素\n");
if(GetElem(L,3,e))
printf("%c\n",e);
else
printf("不存在第 3 个元素\n");
printf("(7)输出元素 a 的位置\n");
printf("%d\n",LocateElem(L,'a'));
printf("(8)在第 4 个元素位置上插入 f 元素\n");
ListInsert(L,4,'f');
printf("(9)输出顺序表 L\n");
DispList(L);
printf("(10)删除顺序表 L 的第 3 个元素\n");
if(ListDelete(L,3,e))
printf("已删除第 3 个元素:%c\n",e);
else
printf("删除第 3 个元素失败!\n");
printf("(11)输出顺序表 L\n");
DispList(L);
printf("(12)释放顺序表 L\n");
DestoryList(L);
return 0;
}
4 实验结果
本文由作者按照 CC BY 4.0 进行授权