线性表:由同类型数据元素构成的有序序列的线性结构
编译环境: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前新插入一个新元素xvoid Delete(int i, List L);//删除指定位序i的元素int Length(List L);//返回线性表L的长度nvoid 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前新插入一个新元素xvoid Delete(int i, List L);//删除指定位序i的元素int Length(List L);//返回线性表L的长度nvoid 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);
}