資料結構--順序表實現資料處理系統(C語言)
阿新 • • 發佈:2018-12-13
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 10 #define OK 1 #define ERROR 0 #define true 1 typedef int Status; typedef int DataType; typedef struct { DataType *Element; int Length; }List; // Status InitList(List *L) ; //順序表初始化 Status DestoryList(List *L); //銷燬順序表 Status InputList(List *L); //輸入順序表 Status Find_Position(List *L); //查詢(2), 按位置查詢 Status Find_Value(List *L) ;//查詢(1), 按值查詢 Status TraverList(List *L); //遍歷順序表 Status Delete_Value(List *L) ;//按值刪除 Status Delete_Position(List *L);//按位置刪除 Status Reverse_List(List *L); //順序表逆置 Status Revise_Position(List *L); //按位置修改 Status Revise_Value(List *L); //按值修改 // Status InitList(List *L)//順序表初始化 { List *p=L; p->Element=(DataType*)malloc(sizeof(MAXSIZE)); // printf("\n1\n"); //if(!p->Element) //exit(OVERFLOW); // printf("\n2\n"); p->Length=-1; // printf("\n3\n"); return OK; } Status DestoryList(List *L) //銷燬順序表 { if(L->Element==NULL||L==NULL) { printf("\n順序表已經為空!\n"); return ERROR; } else { printf("\n\n"); free(L->Element); //printf("\n釋放L->Element\n"); L->Element=NULL; //printf("\nL->Element==NULL\n"); L=NULL; //printf("\nL==NULL\n"); //printf("釋放成功!\n"); return OK; } } Status InputList(List *L)//輸入順序表 { printf("\n請元素個數\n"); int n; scanf("%d", &n); printf("\n輸入元素的值:\n"); for(int i=0; i<n; i++) { scanf("%d", &L->Element[i]); L->Length++; } printf("\n輸出此順序表!\n"); int s= TraverList(L); return OK; } Status TraverList(List *L) //遍歷順序表 { // printf("\n輸出此順 序表!\n"); //if(L!=NULL) if(L->Length==-1) { printf("\n當前順序為空表\n"); return ERROR; } //printf("\n\n輸出此順序表!\n"); for(int i=0; i<=L->Length; i++) printf("%d ", L->Element[i]); return OK; } Status Find_Value(List *L) //查詢(1), 按值查詢 { int e=0, flag=0, x=0; printf("\n當前順序表為:\n"); int s= TraverList(L); printf("\n請輸入要查的數值:\n"); scanf("%d", &e); for(int i=0; i<=L->Length; i++) if(e==L->Element[i]) { printf("L->Element[i]==%d:\n", L->Element[i]); printf("L->Length===%d:\n", L->Length); x=i; flag=1; } if(flag==0) { printf("\n輸入的資料不再順序表中!\n"); return ERROR; } else { printf("\n%d是順序表的第%d個元素\n", e, x+1); return OK; } } Status Find_Position(List *L) //查詢(2), 按位置查詢 { int p=0, e=0, x=0, flag=0; printf("\n當前順序表為:\n"); int s= TraverList(L); if(L->Length==-1) printf("\n當前為空表,不執行查詢!]n"); printf("\n\n請輸入要查詢的位置!\n"); scanf("%d", &p); if(p<1||p>L->Length+2) { printf("\n位置輸入不合法!\n"); return ERROR; } for(int i=0; i<=L->Length; i++) { if(p==i+1) { x=i; e=L->Element[i]; flag=1; } } if(flag==1) { printf("第%d個元素是%d", x+1, e); return OK; } else return ERROR; } Status InsertList_Position(List *L) //按位置插入順序表 { int p=0,e=0; printf("\n\n請輸入要插入的位置\n\n"); scanf("%d", &p); if(p<1||p>L->Length+2) { printf("\n輸入不合法!\n"); return ERROR; } printf("\n\n請輸入要插入的數值\n\n"); scanf("%d", &e); printf("\n插入後的數值為:\n"); int s1= TraverList(L); for(int i=L->Length; i>=p-1;i--) { L->Element[i+1]=L->Element[i]; } L->Element[p-1]=e; L->Length++; printf("\n插入後的數值為:\n"); int s2= TraverList(L); return OK; } Status Delete_Value(List *L) //按值刪除 { int e=0, flag=0,x=0; printf("\n當前順序表為\n"); int s1=TraverList(L);//遍歷順序表 printf("\n輸入要刪除的數值\n"); scanf("%d", &e); for(int i=0; i<=L->Length;i++) { if(L->Element[i]==e) { x=i; flag=1; } } if(flag==1) { printf("刪除後的順序表為\n"); for(int i=x; i<=L->Length;i++) L->Element[i]=L->Element[i+1]; L->Length--; int s2=TraverList(L);//遍歷順序表 return OK; } else return ERROR; } Status Delete_Position(List *L) //按位置刪除 { int p=0; printf("\n當前順序表為\n"); int s1=TraverList(L);//遍歷順序表 printf("\n輸入要刪除的元素的位置\n"); scanf("%d", &p); if(p<1||p>L->Length+2) { printf("\n輸入有誤!\n"); return ERROR; } else { printf("刪除後的順序表為\n"); for(int i=p-1; i<=L->Length; i++) L->Element[i]=L->Element[i+1]; L->Length--; int s2=TraverList(L);//遍歷順序表 return OK; } } Status Sort_List(List *L) //排序 { if(L->Length==-1) { printf("\n當前表順序表為空無法排序\n"); return ERROR; } printf("\n請選擇排序方式\n"); printf("1.從小到大排序"); printf("\n2.從大到小排序\n"); int n; printf("\n請輸入操作:\n"); scanf("%d", &n); if(n==1) { int Tmp; printf("\n當前順序表\n"); int s0=TraverList(L); for(int i=0;i<=L->Length;i++) for(int j=0;j<=L->Length;j++) if(L->Element[i] < L->Element[j]) { Tmp=L->Element[i]; L->Element[i]=L->Element[j]; L->Element[j]=Tmp; } printf("\n從小到大排序後的順序表\n"); int s1=TraverList(L); } if(n==2) { int Tmp; printf("\n從大到小排序前的順序表\n"); int s0=TraverList(L); for(int i=0;i<=L->Length;i++) for(int j=0;j<=L->Length;j++) if(L->Element[i] > L->Element[j]) { Tmp=L->Element[i]; L->Element[i]=L->Element[j]; L->Element[j]=Tmp; } printf("\n從大到小排序後的順序表\n"); int s1=TraverList(L); } return OK; } Status Reverse_List(List *L) //順序表逆置 { printf("\n當前順序表\n"); int s1=TraverList(L); //順序表實現逆置 int Tmp=0, p=L->Length; for(int i=0;i<=p/2;i++, p--) { Tmp=L->Element[i]; L->Element[i]=L->Element[p]; L->Element[p]= Tmp; } printf("\n逆置後的順序表\n"); int s=TraverList(L); return OK; } Status Revise_Position(List *L) //按位置修改 { printf("\n修改前順序表為:\n"); int s=TraverList(L); printf("請輸入要替換元素位置"); int p; scanf("%d", &p); if(p<1||p>L->Length+2) { printf("\n位置輸入有誤!\n"); return ERROR; } else{ printf("\n請輸入新值:\n"); int e=0; scanf("%d", &e); for(int i=0; i<=L->Length;i++){ if(i==p-1) { L->Element[i]=e; } } printf("\n修改後順序表為:\n"); int s1=TraverList(L); return OK; } } Status Revise_Value(List *L) //按值修改 { int x=0, e=0, flag=0,q=0; printf("當前順序表為:\n"); int s1= TraverList(L) ; printf("\n請輸入要修改的數值:\n"); scanf("%d", &x); for(int i=0; i<=L->Length;i++) { if(L->Element[i]==x) { //L->Element[i]=e; flag=1; q=i; } } if(flag==0) { printf("\n查詢不到要修改的值,輸入有誤!\n"); return ERROR; } else{ printf("\n請輸入新值:\n"); scanf("%d", &e); for(int i=q; i<=L->Length;i++) { if(L->Element[i]==x) { L->Element[i]=e; flag=1; } } int ss=TraverList(L); return OK; } } int main() { List L; int s1=0,s2=0; printf("\t\t***************************************************************"); printf("\n賬號登陸:"); printf("\n"); printf("\n請輸入管理員賬號:\n"); printf("\n"); scanf("%d", &s1); printf("\n請輸入管理員密碼\t\tn"); printf("\n"); scanf("%d", &s2); if(s1==123&&s2==123) { printf("密碼正確正在載入系統"); int i; while(i<1000000) { if(i%100==0) { //printf("i==%d", i); printf(">"); } i++; } system("cls"); while(true) { printf("\n\n"); //printf("0.test\n"); printf("\n\t\t\t+++++++++++++++++++++++++++++歡迎進入資料管理系統++++++++++++++++++++++++\n"); printf(""); printf("\n\t\t\t*************************************************************************\n"); printf("\t\t\t|1.順序表的初始化\t\t\t5.順序表的刪除(按值和按位置) |\n"); printf("\t\t\t|2.輸入一個順序表的值\t\t\t6.修改元素(按值和按位置)\t|\n"); printf("\t\t\t|3.查詢元素(按值和按位置)\t\t7.遍歷順序表 \t\t|\n"); printf("\t\t\t|4.順序表的插入(按值和按位置)\t\t8.排序 \t\t|\n"); printf("\t\t\t|9.逆置\t\t\t\t\t10.銷燬順序表 \t|\n"); printf("\t\t\t|11.清屏\t\t\t\t12.退出系統 \t\t|\n"); printf("\t\t\t*************************************************************************\n"); printf("\n\n"); int c; scanf("%d", &c); switch(c) { case 1: if(InitList(&L)==OK) printf("\n初始化成功!\n"); else printf("\n初始化失敗!\n"); break;//順序表初始化 case 2: if(InputList(&L)==OK) printf("\n輸入順序表成功!\n"); else printf("\n輸入順序表失敗!\n"); break; case 3: { printf("\n請輸入要選擇的操作\n"); printf("\n1.按值查詢\n"); printf("\n2.按位置查詢\n"); printf("\n其它鍵.返回上一層\n"); int n; scanf("%d", &n); if(n==1) { if(Find_Value(&L)==OK) printf("\n按值查詢成功!\n"); else printf("\n按值查詢失敗!\n"); } if(n==2) { if(Find_Position(&L)==OK) printf("\n按位置查詢成功!\n"); else printf("\n按位置查詢失敗!\n"); } } ;break; case 4: { printf("\n請輸入要選擇的操作\n"); printf("\n1.按位置插入\n"); printf("\n其它鍵.返回上一層\n"); int n; scanf("%d", &n); if(n==1) { if(InsertList_Position(&L)==OK) printf("\n按位置插入成功!\n"); else printf("\n按位置插入失敗!\n"); } } ;break; case 5: { printf("\n請輸入要選擇的操作\n"); printf("\n1.按值刪除\n"); printf("\n2.按位置刪除\n"); printf("\n其它鍵.返回上一層\n"); int n; scanf("%d", &n); if(n==1) { if(Delete_Value(&L)==OK) //按值刪除 printf("\n按值刪除成功!\n"); else printf("\n按值刪除失敗!\n"); } if(n==2) { if(Delete_Position(&L)==OK) //查詢(2), 按位置查詢(&L)==OK) printf("\n按位置查詢成功!\n"); else printf("\n按位置查詢失敗!\n"); } }; break; case 6: { printf("\n請輸入要選擇的操作\n"); printf("\n1.按值修改\n"); printf("\n2.按位置修改\n"); printf("\n其它鍵.返回上一層\n"); int n; scanf("%d", &n); if(n==1) { if(Revise_Value(&L)==OK) //按值修改 printf("\n按值修改成功!\n"); else printf("\n按值修改失敗!\n"); } if(n==2) { if(Revise_Position(&L)==OK) printf("\n按位置修改成功!\n"); else printf("\n按位置修改失敗!\n"); } }; break; case 7: { if(TraverList(&L)==OK) printf("\n遍歷成功!\n"); else printf("\n遍歷失敗!\n"); }; break; case 8: { if(Sort_List(&L)==OK) printf("\n排序成功!\n"); else printf("\n排序失敗!\n"); }; break; case 9: { if(Reverse_List(&L) ==OK) printf("\n順序表逆置成功!\n"); else printf("\n順逆置失敗!\n"); }; break; case 10: { if(DestoryList(&L) ==OK) printf("\n順序表銷燬成功!\n"); else printf("\n順序表銷燬失敗!\n"); }; break;//清屏 case 11: { system("cls"); } break; case 12: { printf("\n退出系統!\n"); return ERROR; }; break; default:printf("\n輸入有誤!\n");break; } } } else { printf("\n密碼或賬號輸入有誤!\n"); } return 0; }