线性表:由同类型数据元素构成的有序序列的线性结构
编译环境:Dev-C++
结构实现:
struct LNode {
ElementType Data[MAXSIZE];
int last;
};
主要操作函数:
List MakeEmpty();//初始化一个空表
ElementType FindKth(int k, List L);//根据位序k,返回相应的元素
int Find(ElementType x, List L);//在线性表中查找x的第一次出现的位置
void Insert(ElementType x, int i, List L);//在位序i前新插入一个新元素x
void Delete(int i, List L);//删除指定位序i的元素
int Length(List L);//返回线性表L的长度n
void Show(List L);//输出线性表中的所有数据
void Destroy(List L);//销毁线性表
测试程序以及相关函数的实现:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int ElementType;
struct LNode {
ElementType Data[MAXSIZE];
int last;
};
typedef struct LNode *List;
List MakeEmpty();//初始化一个空表
ElementType FindKth(int k, List L);//根据位序k,返回相应的元素
int Find(ElementType x, List L);//在线性表中查找x的第一次出现的位置
void Insert(ElementType x, int i, List L);//在位序i前新插入一个新元素x
void Delete(int i, List L);//删除指定位序i的元素
int Length(List L);//返回线性表L的长度n
void Show(List L);//输出线性表中的所有数据
void Destroy(List L);//销毁线性表
int main() {
int Num;
int i;
ElementType x;
List L;
printf("开始测试\n");
printf("初始化一个空表...\n");
L = MakeEmpty();
if (L) {
printf("初始化成功...\n");
}
printf("为线性表补充数据...\n");
scanf("%d", &Num);
for (i = 0; i < Num; i++) {
scanf("%d", &x);
L->Data[i]=x;
L->last++;
}
printf("线性表数据:\n");
Show(L);
printf("查找数据...\n");
printf("第二个数据是:%d\n", FindKth(2,L));
printf("数字3的位置是:%d", Find(3, L));
printf("删除第四个数据...\n");
Delete(4, L);
printf("线性表数据:\n");
Show(L);
printf("在位序四之前插入数据100:...\n");
Insert(100,4,L);
Show(L);
printf("销毁线性表:...\n");
Destroy(L);
system("pause");
return 0;
}
List MakeEmpty() {
List L;
L = (List)malloc(sizeof(struct LNode));
//if (L = NULL) {
//printf("申请内存出错!");
//exit(0);
//}
L->last = -1;
return L;
}
ElementType FindKth(int k, List L) {
if (k<1 || k>L->last+1) {
printf("位序不正确!\n");
return -1;
}
else {
return L->Data[k - 1];
}
}
int Find(ElementType x, List L) {
int i = 0;
while (i <= L->last&&L->Data[i] != x)
i++;
if (i > L->last) {
printf("未找到相关数据\n");
return -1;
}
return i;
}
void Insert(ElementType x, int i, List L) {
int j;
if (L->last == MAXSIZE - 1) {
printf("表满!\n");
return;
}
else if (i < 1 || i>L->last + 2) {
printf("位序不合法!\n");
return;
}
for (j = L->last; j >=i - 1; j--) {
L->Data[j + 1] = L->Data[j];
}
L->Data[i - 1] = x;
L->last++;
}
void Delete(int i, List L) {
int j;
if (L->last < 0) {
printf("空表!");
return;
}
else if (i<1 || i>L->last + 1) {
printf("位序不合法!\n");
return;
}
for (j = i - 1; j < L->last; j++) {
L->Data[j] = L->Data[j + 1];
}
L->last--;
}
int Length(List L) {
return L->last + 1;
}
void Show(List L) {
int i;
printf("线性表长度为:%d\n", Length(L));
for (i = 0; i <= L->last; i++) {
printf("%d:%d\n", i, L->Data[i]);
}
}
void Destroy(List L) {
L->last = -1;
free(L);
}