#include #include //提供malloc()原型 /* 線性表需要的方法: 1、 List MakeEmpty():初始化一個空線性表 2、 EementType FindKey(int K, List L):根據位序K,返回相應元素 3、 int Find(ElementType ... ...
#include <stdio.h> #include <stdlib.h> //提供malloc()原型 /* 線性表需要的方法: 1、 List MakeEmpty():初始化一個空線性表 2、 EementType FindKey(int K, List L):根據位序K,返回相應元素 3、 int Find(ElementType X,List L): 線上性表L中查找X的第一次出現位置 4、 void Insert(ElementType X,int i,List L): 在位序i前插入一個新元素X 5、 void Delete(int i , List L): 刪除指定位序i的元素 6、 int Length(List L):返回線性表L的長度n */ #define MAXSIZE 20 //define 預處理器指令,定義常量 typedef struct LNode *List; typedef int ElementType; //定義數據結構的自定義名稱 struct LNode{ ElementType Data[MAXSIZE];//定義一個數組 int Last; //數組中最後一個元素位置 }; struct LNode L; //聲明一個struct LNode 型的變數L List PtrL;//聲明一個struct LNode * 型的指針變數PtrL //-> 間接運算符,與一個指向結構或聯合的指針一起使用,標識該結構或聯合的一個成員 //訪問下標為i的元素方法 L.Data[i] 或者 PtrL->Data[i] List MakeEmpty() /*初始化,建立空的順序表*/ { List PtrL; PtrL = (List )malloc(sizeof(struct LNode)); //使用malloc()為結構分配足夠的記憶體空間,並設置PtrL指向該位置 if(NULL == PtrL) //malloc()是否成功請求到記憶體 { printf("記憶體分配失敗!"); exit(EXIT_FAILURE); //EXIT_FAILURE的值也被定義在stdlib.h中。標準提供了兩個返回值以保證在所有操作系統中都能正常工作:EXIT_SUCCESS(或者,相當於 0)表示普通的程式結束, EXIT_FAILURE 表示程式異常中止。 } PtrL->Last = -1; return PtrL; //返回結構指針 } int Find(ElementType X, List PtrL) /*查找*/ { int i = 0; //聲明並初始化變數i while (i <= PtrL->Last && PtrL->Data[i]!=X) //i 小於等於數組元素數量並且數組i位置的元素與X不相等 { i++;//i遞增1 } if(i > PtrL->Last)//如果i大於了數組元素的數量 { return -1; //未找到 } else { return i;//否則返回i } } void Insert(ElementType X, int i, List PtrL) /*插入*/ { int j;//聲明變數j if (PtrL->Last == MAXSIZE-1) { printf("表空間已滿!"); return; } if (i < 1 || i > PtrL->Last+2) { printf("非法位置"); return; } for (j=PtrL->Last;j>=i-1;j--)//j初始化為數組元素長度,如果j大於等於i-1, { PtrL->Data[j+1] = PtrL->Data[j]; //將數組 j 位置的元素位置向後移動一位 } PtrL->Data[i-1]=X; //在i-1的位置插入X PtrL->Last++; //Last指向最後元素 return; } void Delete(int i,List PtrL) /*刪除*/ { int j; if(i < 1 || i > PtrL->Last+1) { printf("%d元素不存在",i); return; } for (j = i; i<= PtrL->Last;j++) { PtrL->Data[j-1] = PtrL->Data[j]; //將i位置的元素移動到i-1的位置 } PtrL->Last--; //Last指向最後元素 return; } int main(int argc,char const *argv[]) { MakeEmpty();//初始化 int n = 10; int i = 1; int get_find; for (;i<=n;i++) { Insert(i,i,&L); //插入元素 } for (i=0;i<n;i++) { printf("%d",L.Data[i]); //列印插入的元素 } printf("\n"); get_find=Find(5,&L);//查找5的位置 printf("%d",get_find);//列印查找的位置 printf("\n"); Delete(5,&L);//刪除元素5 for (i=0;i<n-1;i++) { printf("%d",L.Data[i]); //列印插入的元素 } return 0; }