C語言順序表的簡單實現
阿新 • • 發佈:2018-11-06
今天剛學了資料結構,老師教的我是雲裡霧裡的,晚上回來自己又教程視訊,不管怎麼說算是簡單的實現了順序表的一些簡單功能。
順序表裡的難點有向順序表裡插入元素,刪除元素,查詢元素位置這幾個函式比較難寫,我自己根據這幾個難點做了幾個圖片來解釋這幾個功能的具體實現:
//插入元素 int InsertList(sqlink L,int data,int no){ int j; if(L->last >= maxsize-1){ printf("沒有空閒空間!\n"); return 0; }else if(no<0||no>L->last+1){ printf("插入位置不存在!\n"); return 0; }else{ for(j=L->last;j>=no-1;j--) L->data[j+1] = L->data[j]; L->data[no-1] = data; L->last++; return 0; } }
//刪除元素
int DeleteList(sqlink L,int no){
int j;
if(no<0||no>L->last){
printf("刪除的元素不存在");
return 0;
}else{
for(j=no;j+1<=L->last;j++)
L->data[j] = L->data[j+1];
L->last--;
return 0;
}
}
//定位元素 int LocateList(sqlink L,int data){ int i = 0; while(i<=L->last&&L->data[i]!=data) i++; if(i<L->last) return i; else return 0; }
所有程式碼的實現:
#include<stdio.h> #include<malloc.h> #define maxsize 1024 //線性表的最大長度 typedef struct{ //表的型別 int data[maxsize];//表的儲存空間 int last; }sqlist,*sqlink; //說明標示符 void CreateList(sqlink L);//創空表 void ClearList(sqlink L);//置空表 int GetList(sqlink L,int no);//取表元素 int LengthList(sqlink L);//求表長 int InsertList(sqlink L,int data,int no);//插入元素 int DeleteList(sqlink L,int no);//刪除元素 int LocateList(sqlink L,int data);//定位元素 int EmptyList(sqlink L);//判空表 void PrintList(sqlink L);//打印表元素 int main(){ sqlink L = (sqlink)malloc(sizeof(sqlist)); CreateList(L); PrintList(L); int data,x; printf("請輸入要插入的資料和位置:"); scanf("%d %d",&data,&x); InsertList(L,data,x); PrintList(L); return 0; } void CreateList(sqlink L){ int tempNo = 1; int tempData = 0; do{ printf("請輸入順序表第%d個元素:",tempNo); scanf("%d",&tempData); if(tempData!=-1){ L->data[tempNo-1] = tempData; L->last = tempNo-1; tempNo++; } }while(tempNo<=maxsize&&tempData!=-1); } void PrintList(sqlink L){ int i; for(i = 0;i<LengthList(L);i++){ printf("%d ",L->data[i]); } printf("\n"); } void ClearList(sqlink L){ L->last = -1; } int GetList(sqlink L,int no){ int tempData = 0; tempData = L->data[no-1]; return tempData; } int LengthList(sqlink L){ int tempL; tempL = L->last+1; return tempL; } //插入元素 int InsertList(sqlink L,int data,int no){ int j; if(L->last >= maxsize-1){ printf("沒有空閒空間!\n"); return 0; }else if(no<0||no>L->last+1){ printf("插入位置不存在!\n"); return 0; }else{ for(j=L->last;j>=no-1;j--) L->data[j+1] = L->data[j]; L->data[no-1] = data; L->last++; return 0; } } //刪除元素 int DeleteList(sqlink L,int no){ int j; if(no<0||no>L->last){ printf("刪除的元素不存在"); return 0; }else{ for(j=no;j+1<=L->last;j++) L->data[j] = L->data[j+1]; L->last--; return 0; } } //定位元素 int LocateList(sqlink L,int data){ int i = 0; while(i<=L->last&&L->data[i]!=data) i++; if(i<L->last) return i; else return 0; }