順序表的基本運算
阿新 • • 發佈:2018-12-19
1、順序表的基本資料單元
#define maxsize 12
typedef struct {
int data[maxsize]; // 表的儲存空間
int last;
}sqlist, *sqlink; // *sqlink 表說明符
2、宣告方法
// 置空表 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 CreateList(sqlink L); // 打印表元素 void PrintList(sqlink L);
3、在main.c 裡面實現方法
#include <stdio.h> #include "sqlist.h" // 建空表 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); } // 判空表 int EmptyList(sqlink L) { if (L->last == 0) { return 1; }else { return 0; } } // 定位元素 int LocateList(sqlink L,int data) { int i = 0; for(i=0; i < L->last; i++) { if (L->data[i] == data) { return i; } } return 0; } // 置空表 void ClearList(sqlink L) { L->last = -1; } // 取表元素 int GetList(sqlink L, int no) { if (no < 0 || no > L->last) { return -1; }else { return L->data[no]; } } // 求表長 int LengthList(sqlink L) { return L->last; } // 插入元素 int InsertList(sqlink L,int data, int no) { // 思路: //1 判斷表是否還有儲存空間,如果沒有,直接返回-1 if(L->last <= no && no >= 0) { return -1; }else { int j = 0; for (j = L->last; j >= no; j--) { L->data[j+1] = L->data[j]; printf("j====%d\n",j); } L->data[no] = data ; L->last++; return 1; } //2 判斷元素插入的位置是否在表的空間區域之內 //3 開始插入操作,for迴圈裡面的注意點有 //必須從最後一個元素反過來遍歷,例如最後一個元素下標是j,那麼就是把j的下標對應的值,賦值給j+1,for迴圈的結束條件是j大於或等於i //在for迴圈的結束後面進行插入操作 return 0; } // 刪除元素 int DeleteList(sqlink L, int no) { // 1先判斷要刪除的元素下標是否小於0或者大於當前列表的最大長度 // 2 進行刪除操做 // for迴圈從要刪除的元素下標開始,一直到列表的Last,全部資料往前挪一位 // 3 最後把列表的長度減一 if(L->last <= no && no >= 0) { return -1; }else { int j = 0; for (j = no; j < L->last; j++) { L->data[j] = L->data[j+1]; printf("j====%d\n",j); } L->last--; return 1; } return 0; } // 打印表元素 void PrintList(sqlink L) { int i; for (i = 0; i < LengthList(L); i++) { printf("%d", L->data[i]); } printf("\n"); } int main(int argc, const char * argv[]) { // insert code here... // 分配記憶體 sqlink L = (sqlink)malloc(sizeof(sqlist)); CreateList(L); PrintList(L); // 定位元素 // int i = 0; // i = LocateList(L, 22); // printf("22在%d的位置",i); // 插入元素 // InsertList(L,2,4); DeleteList(L,2); PrintList(L); int num = GetList(L,2); printf("第三個元素是%d",num); return 0; }