線性表:由同類型數據元素構成的有序序列的線性結構
編譯環境: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);
}