线性表:由同类型数据元素构成的有序序列的线性结构
编译环境: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); }