順序存儲線性表的結構體:
#define MAXSIZE 100 //數組最大長度 typedef int ElemType; //元素類型 typedef struct //定義線性表結構體 { ElemType date[MAXSIZE]; //線性表存儲元素的數組 int length; //記錄線性表的長度 }sqList; //線性表的名稱
順序存儲的插入函數:
/* 線性表的插入函數 *p 指向線性表的指針 i 需要插入的位置 e 將要插入的元素
Status未返回值類型,在頭文件處定義,格式為:typedef int Status; //返回值類型,操作成功返回1(OK),失敗返回0(ERROR) */ Status ListInsert(sqList *p, int i, ElemType e) { if(p->length == MAXSIZE) //如果表長度已經等於最大值,則表已滿,返回ERROR return ERROR; if(i < 1 || i > p->length + 1) //如果i<1或i>表長+1,則位置有誤,返回ERROR return ERROR; if(i <= p->length) //判斷i是不是表尾位置 { for(int k = p->length; k >= i - 1; k--) //將表中i之后的元素全部后移一個位置 p->date[k+1] = p->date[k]; } p->date[i-1] = e; //將第i個位置的元素賦值為e p->length++; //將表長+1 return OK; //操作成功,返回OK }
順序存儲的刪除函數:
/* 線性表的刪除操作函數 *p 指向線性表的指針 i 需要刪除的位置 *e 將刪除的元素存入*e中返回 */ Status ListDel(sqList *p, int i, ElemType *e) { if(p->length == 0) //判斷線性表是否為空 return ERROR; if(i < 1 || i > p->length) //判斷i的位置是否合理 return ERROR; *e = p->date[i-1]; //將表中第i個元素的值賦值給*e printf("刪除的元素為 %d\n", *e); if(i <= p->length) //判斷i是不是表尾元素 { for(int k = i-1; k <= p->length; k++) //將表中i后的元素全部向前移一位 p->date[k] = p->date[k+1]; } p->length--; //將表長-1 return OK; //操作成功返回OK }
順序存儲的索引查找函數:
/* 線性表的查詢操作 p 表的形參 i 需要得到的位置 *e 將所查位置的元素賦值給*e返回 */ Status GetElem(sqList p, int i, ElemType *e) { if(p.length == 0 || i < 1 || i > p.length) //判斷表是否為空,i位置是否合理 return ERROR; *e = p.date[i-1]; //將表的第i個元素賦值給*e printf("此處的元素為 %d\n", *e); return OK; //操作成功返回OK }
順序存儲的修改函數:
/* 修改表中i位置的元素內容 */ Status UpdateList(sqList *p, int i, ElemType e) { if(p->length == 0 || i < 1 || i > p->length) return ERROR; p->date[i-1] = e; return OK; }
順序存儲的遍歷打印函數:
/* 遍歷打印表中元素 */ Status PrintList(sqList p) { int i = 0; if(p.length == 0) return ERROR; while(i < p.length) { printf("%d ", p.date[i]); i++; } printf("\n"); return OK; }
主函數:
void main() { sqList list; //聲明線性表的變量 list.length = 0; //設置表長為0,相當於初始化 int i, e; //i為元素位置,e為元素內容 while(true) { printf("請選擇對線性表的操作:\n"); printf("1.插入\n"); printf("2.刪除\n"); printf("3.查找\n"); printf("4.輸出\n"); printf("5.修改\n"); printf("6.退出\n"); int a; scanf("%d", &a); switch(a) { case 1: printf("請輸入需要插入的位置:"); scanf("%d", &i); printf("請輸入需要插入的元素:"); scanf("%d", &e); if(ListInsert(&list, i, e)) printf("插入成功\n"); else printf("插入失敗\n"); break; case 2: printf("請輸入需要刪除的位置:"); scanf("%d", &i); if(ListDel(&list, i, &e)) printf("刪除成功\n"); else printf("刪除失敗\n"); break; case 3: printf("請輸入需要查找的位置:"); scanf("%d", &i); if(GetElem(list, i, &e)) printf("查詢成功\n"); else printf("查詢失敗\n"); break; case 4: PrintList(list); break; case 5: printf("請輸入需要修改的位置:"); scanf("%d", &i); printf("請輸入新的的元素:"); scanf("%d", &e); if(UpdateList(&list, i, e)) printf("修改成功\n"); else printf("修改失敗\n"); break; case 6: return; default: printf("選擇錯誤\n"); break; } } }
經檢測,所有代碼均可執行!