嚴蔚敏版資料結構—順序表
阿新 • • 發佈:2018-12-14
嚴蔚敏版資料結構是本好書!
少廢話咯,直接上程式碼研究吧!
程式碼不難,重在理解
#include<stdio.h> #include<stdlib.h> #include<string.h> #define OK 1 #define ERROR 0 //定義好書的資料型別 Book型別 typedef struct { char name[20]; char no[10]; float price; }Book; //定義順序表結構 typedef struct { Book *p; int length; }SqList; //初始化順序表 int InitList(SqList &L) { L.p=new Book[100]; L.length=0; return OK; } //順序表取值 int GetElem(SqList L,int i,Book &e) { if(i<1||i>L.length) { printf("傳入i值不合理!"); return ERROR; } e=L.p[i-1]; return OK; } //查詢元素 int LocateElem(SqList L,Book e) { int i; for(i=0;i<L.length;i++) { if(L.p[i].price==e.price)//這裡本來還要判斷其他內容是否相等,但是C語言字串的判斷挺麻煩 return i+1; // 這兒作為練習,就省略,簡單起見額,判斷也不難,寫個函式即可 } return -1; } //插入元素 int InsertElem (SqList &L,int i,Book e) { if(i<1||i>L.length+1) { printf("傳入i值不合理!"); return ERROR; } if(L.length==100) { printf("當前順序表儲存空間已滿!"); return ERROR; } int j; for (j=L.length-1;j>=i-1;j--) { L.p[j+1]=L.p[j]; } L.p[i-1]=e; ++L.length; return OK; } //刪除元素 int DeleteElem(SqList &L,int i) { int j; if(i<1||i>L.length+1) { printf("傳入i值不合理!"); return ERROR; } for (j=i;j<L.length-1;j++) { L.p[j-1]=L.p[j]; } --L.length; return OK; } //輸入元素 void InputElem(SqList &L,int n) { int i; for(i=0;i<n;i++) { printf("請輸入書本資訊:"); scanf("%s",&L.p[i].name); scanf("%s",&L.p[i].no); scanf("%f",&L.p[i].price); } L.length=n; } //輸出順序表 void PrintElem(SqList L) { int i; for(i=0;i<L.length;i++) { printf("The -NO-%d-Book: ",i+1); printf("%s ",L.p[i].name); printf("%s ",L.p[i].no); printf("%.2f \n",L.p[i].price); } } int main() { Book a,b ; //作為插入的元素 SqList L; InitList(L); //建立順序表 InputElem(L,3); //輸入初始值,三個元素 PrintElem(L); //列印一下看看 //給 a 賦值 strcpy(a.name,"666"); strcpy(a.no,"666"); a.price=6.66; printf("\n---------------插入a元素在第二個位置---------------\n"); InsertElem(L,2,a);//插入元素 PrintElem(L); //列印看看插入是否成功 //列印看看查詢是否成功 printf("\n------------a元素在第%d個位置!-------------\n",LocateElem(L,a)); //取位置是二的元素的物件 printf("\n------------取出位置為二的元素給b變數-------------\n",LocateElem(L,a)); GetElem(L,2,b); printf("\n b_name:%s,b_no:%s,b_price:%.2f\n",b.name,b.no,b.price); //刪除a元素 printf("\n------------將a元素刪除後的順序表-------------\n",LocateElem(L,a)); DeleteElem(L,2); PrintElem(L); return 0; }