資料結構順序表相關基本操作練筆
阿新 • • 發佈:2019-02-03
#include<stdio.h> #include<stdlib.h> #define MAX 30 #define LIST_INCREMENT 40 typedef struct{ int lenth; int listsize; int *base; }sqlist; void InitList(sqlist &L)//初始化順序表 { L.base=(int *)malloc(MAX*sizeof(int)); if(!L.base)//分配記憶體失敗 exit(1); L.lenth=0; L.listsize=MAX; printf("please input the lenth of the list\n"); scanf("%d",&L.lenth); printf("please input the val of the list:"); for(int i=0;i<L.lenth;i++) { scanf("%d",&L.base[i]); } } void output(sqlist L)//輸出函式 { int i; for(i=0;i<L.lenth;i++) { printf("%5d",L.base[i]); } printf("\n"); } bool compare(int elem1,int elem2) { if(elem1==elem2) return true; else return false; } int LocateElem(sqlist L,int elem) { int i=1; int *p=L.base; while(i<=L.lenth&&!compare(*p++,elem))//注意是*p++,取的是指標p的值,再++,不是 *p //如果這裡用*p的話,下面一定不要忘了加*p++; { i++; } if(i<=L.lenth) return i; else return 0; } void Destroylist(sqlist &L)//銷燬順序線性表L { free(L.base);//釋放L.base所指向的儲存空間 L.base=NULL;//L.base 不指向任何的儲存單元 L.lenth=0; L.listsize=0; } int ListInsert(sqlist &L,int i,int elem) { int *newbase,*p,*q; if(i<1||i>L.lenth+1) { return 0; } if(L.lenth==L.listsize) { newbase=(int *)realloc(L.base,(L.listsize+LIST_INCREMENT)*sizeof(int)); if(!newbase) exit(1); L.base=newbase; L.listsize+=LIST_INCREMENT; } q=L.base+i-1; for(p=L.base+L.lenth-1;p>=q;--p) { *(p+1)=*p; *q=elem; L.lenth++; } return 0; } void ListDele(sqlist L,int i) { int elem; int *p,*q; p=L.base+i-1; elem=*p; q=L.base+L.lenth-1; for(p++;p<=q;p++) *(p-1)=*p; L.lenth-1; } void MergeList(sqlist La,sqlist &Lb,sqlist &Lc) { int *pa,*pa_last,*pb,*pb_last,*pc; pa=La.base; pb=Lb.base; Lc.listsize=Lc.lenth=La.lenth+Lb.lenth; pc=Lc.base=(int*)malloc(Lc.listsize*sizeof(int)); if(!Lc.base) { exit(0); } pa_last=La.base+La.lenth-1; pb_last=Lb.base+Lb.lenth-1; while(pa<=pa_last&&pb<=pb_last) { if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++; while(pb<=pb_last) *pc++=*pb++; } int main() { int a,i; int elem; sqlist La; InitList(La); output(La); printf("請輸入要查詢的資料:"); scanf("%d",&elem); a=LocateElem(La,elem); printf("%d",a); printf("please input the number you want to del\n"); scanf("%d",&i); ListDele(La,i); output(La); return 0; }