第一天 線性表-順序表
阿新 • • 發佈:2021-01-19
第一天進行的對線性表的順序表的基本演算法進行了回顧
第一天270行
加油
程式碼如下:
#include<stdio.h> #include<string.h> #include<Windows.h> #include<malloc.h> #define MAXSIZE 3 typedef struct ONE { int a[MAXSIZE]; int Length; }one; //建立順序表/2為測試程式 void CreatList(one*& L, int c); //初始化順序表 void InitList(one*& L); //銷燬 void DestroyList(one* &L); //判空 bool ListEmpty(one*& L); //表長 int ListLength(one*& L); //輸出 void DisplayList(one*& L); //求表中某個元素 int GetList(one*& L, int e); //插入元素 bool ListInsert(one*& L,int e, int p); //刪除元素 bool DeleteList(one*& L, int e); void CreatList(one* &L, int c) { int i = 0,m; //L = (one * )malloc(sizeof(one)); while (i < c) { m=++i; printf("請輸入%d箇中第%d個元素:",c,m); scanf("%d",&L->a[i]); } L->Length = i; } void CreatList2(one*& L, int b[], int c) { //測試程式 int i = 0, m; //L = (one * )malloc(sizeof(one)); while (i < c) { //printf("請輸入%d箇中第%d個元素:", c, m); L->a[i] = b[i];m = ++i; } L->Length = i; } void InitList(one* &L) { L = (one*)malloc(sizeof(one)); L->Length = 0; } void DestroyList(one*& L) { free(L); } bool ListEmpty(one* &L) { if (L->Length == 0) { return true; } else { return false; } } int ListLength(one*& L) { return L->Length; } void DisplayList(one*& L) { int i; for (i = 0; i < L->Length; ++i) { printf("第%d個--------%d\n",i+1, L->a[i]); } } int GetList(one*& L, int e) { int i = 0; for (i = 0; i < L->Length; ++i) { if (L->a[i] == e) { return i; } } return -1; } bool ListInsert(one*& L, int e, int p) { if (p<0 || p>L->Length) { return false; } int i; int m = p - 1; for (i=L->Length;i>m;--i) { L->a[L->Length] = L->a[L->Length - 1]; } L->a[m] = e; L->Length++; return true; } bool DeleteList(one*& L, int e) { int i,j,k=L->Length; for (i = 0; i < L->Length; ++i) { if(L->a[i]==e){ for (j = i; j < L->Length; j++) { L->a[j] = L->a[j + 1]; } L->Length--; } } if (L->Length < k) { return true; } else { return false; } } void swap(int *a, int *b) { int temp; temp = *a; //*a =* b; a = b; *b = temp; printf("%d\t%d\n", *a, *b); /* main函式體內容測試 int* a, * b; int i, j; i = 1; j = 4; a = &i; b = &j; swap(a, b); printf("%d\t%d\n", *a, *b); */ } int main() { int choose,num6,num7,p7,num8; //one* L; one *L=NULL; int a[MAXSIZE] = { 0,1,2}; while (1) { //printf("\n"); printf("\n\t\t\t 菜 單 \n"); printf("\n\t\t\t\t\t***************************************\n"); printf("\n\t\t\t\t\t1-創 建 表 2-銷 毀 表 \n"); printf("\n\t\t\t\t\t3-檢測表是否為空 4-求 表 的 長 度 \n"); printf("\n\t\t\t\t\t5-輸 出 線 性 表 6-求表中的‘e’元素 \n"); printf("\n\t\t\t\t\t7-插 入‘e’元素 8-刪 除 ‘e’ 元 素 \n"); printf("\n\t\t\t\t\t*************** 9-退出 ****************\n"); printf("\n\t\t\t\t\t***************************************\n"); printf("\n\t\t\t請選擇:"); scanf("%d", &choose); switch (choose){ case 1: { printf("請先設定要輸入的資料數量\n\n\t\t\t\t\t!!!!!(注意:資料最多可儲存%d個)!!!!!\n",MAXSIZE); int num1; scanf("%d", &num1); printf("\n"); InitList(L); CreatList(L, num1); printf("\n"); system("pause"); break; } case 2: { DestroyList(L); system("pause"); break; } case 3: { if (ListEmpty(L) == false) { printf("該表不為空\n"); } else { printf("該表是空表\n"); } printf("\n"); system("pause"); break; } case 4:{ printf("表長為:%d\n",ListLength(L)); printf("\n"); system("pause"); break; } case 5: { //InitList(L); //CreatList2(L,a, MAXSIZE); DisplayList(L); printf("\n"); system("pause"); break; } case 6: { int CA6; printf("請輸入你想要查詢的元素\n"); scanf("%d", &num6); CA6=GetList(L,num6); if (CA6 == -1) { printf("表中無該元素:%d\n", num6); } else { printf("表中有'%d'元素\n%d是表中第%d個元素\n",num6,num6,CA6+1); } printf("\n"); system("pause"); break; } case 7: { printf("請選擇你要插入的元素和位置\n"); DisplayList(L); scanf("%d\n%d", &num7,&p7); bool CA7 = ListInsert(L, num7, p7); if (CA7 != true) { printf("插入失敗\n"); } //DisplayList(L); printf("\n"); system("pause"); break; } case 8: { printf("請選擇你要刪除的元素:\n"); DisplayList(L); scanf("%d", &num8); bool CA8 = DeleteList(L, num8); if (CA8 != true) { printf("刪除失敗,請你選擇正確的刪除項\n"); } //DisplayList(L); printf("\n"); system("pause"); break; } case 9: return 0; default: { printf("請輸入正確的選項"); printf("\n"); system("pause"); break; } } } return 0; }