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;
}