1.線性鏈表的順序存儲構建(SeqList.h)spa
順序表構建code
1 //順序表構建 2 #include <stdio.h> 3 #define MaxSize 100 4 typedef int DataType; 5 6 typedef struct 7 { 8 DataType list[MaxSize]; 9 int size; 10 } SeqList; 11 12 //初始化順序表L 13 void ListInitiate(SeqList *L) 14 { 15 L->size = 0; //定義初始數據元素個數 16 } 17 18 //返回順序表L的當前數據元素個數 19 int ListLength(SeqList L) 20 { 21 return L.size; 22 } 23 24 //在順序表L的位置i(0≤i≤L.size)前插入數據元素值x,插入成功返回1,插入失敗返回0 25 int ListInsert(SeqList *L, int i, DataType x) 26 { 27 int j; 28 if(L->size >= MaxSize) 29 { 30 printf("順序表已滿沒法插入! \n"); 31 return 0; 32 } 33 else if(i < 0 || i > L->size ) 34 { 35 printf("參數i不合法! \n"); 36 return 0; 37 } 38 else 39 { 40 for(j = L->size+1; j > i; j--) 41 L->list[j] = L->list[j-1]; //爲插入作準備 42 43 L->list[i] = x; //插入 44 L->size ++; //元素個數加1 45 46 return 1; 47 } 48 } 49 50 //刪除順序表L中位置i(0≤i≤L->size-1)的數據元素值並存放到參數x中,刪除成功返回1,刪除失敗返回0 51 int ListDelete(SeqList *L, int i, DataType *x) 52 { 53 int j; 54 if(L->size == 0) 55 { 56 printf("順序表已空無數據元素可刪! \n"); 57 58 return 0; 59 } 60 else if(i <0 || i > L->size-1) 61 { 62 printf("參數i不合法"); 63 return 0; 64 } 65 else 66 { 67 *x = L->list[i]; //保存刪除的元素到參數x中 68 69 for(j = i +1; j <= L->size; j++) 70 L->list[j-1] = L->list[j]; //依次前移 71 72 L->size--; //數據元素個數減1 73 74 return 1; 75 } 76 } 77 78 //取順序表L中第i個數據元素的值存於x中,成功則返回1,失敗返回0 79 int ListGet(SeqList L, int i, DataType *x) 80 { 81 if(i < 0 || i > L.size-1) 82 { 83 printf("參數i不合法! \n"); 84 return 0; 85 } 86 else 87 { 88 *x = L.list[i]; 89 return 1; 90 } 91 }
示例——對順序表的操做(增刪改查)blog
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MaxSize 100 4 #define ListLenth 50 5 typedef int DataType; 6 7 //定義順序表的類型SeqList 8 typedef struct 9 { 10 DataType list[MaxSize]; 11 int size; 12 } SeqList; 13 14 //初始化數據 15 void CreList(SeqList *L) 16 { 17 int i; 18 19 L->size=50; 20 //順序表加入數據,依次爲0-49 21 for(i=0;i<50;i++) 22 { 23 L->list[i]=i; 24 } 25 } 26 27 //初始化順序表*L 28 void ListInitiate(SeqList *L) 29 { 30 L->size=0; 31 } 32 33 //返回順序表L的當前數據元素個數 34 int ListLength(SeqList *L) 35 { 36 return L->size; 37 } 38 39 //查找功能,傳參——線性表L和查找元素DataType x,成功返回x在L中的序號不然返回-1 40 int ListLocate(SeqList L,DataType x) 41 { 42 int i=0; 43 while(i<L.size&&L.list[i]!=x) 44 { 45 i++; 46 } 47 if(i<L.size) 48 return (i); 49 else 50 return (-1); 51 } 52 53 //插入功能,傳參——線性表L、插入位置i和所插入元素x,成功返回1不然返回0 54 int ListInsert(SeqList *L,int i,DataType x) 55 { 56 int j; 57 if(L->size>=MaxSize-1) 58 { 59 printf("順序表已滿沒法插入!\n"); 60 return 0; 61 } 62 else if(i<0||i>L->size+1) 63 { 64 printf("參數i不合法!\n"); 65 return 0; 66 } 67 else 68 { 69 for(j=L->size;j>i;j--) 70 { 71 L->list[j]=L->list[j-1]; //爲插入作準備 72 } 73 L->list[i]=x; //插入 74 L->size++; //元素個數加1 75 return 1; 76 } 77 } 78 79 //刪除功能,傳參——順序表L、刪除元素的序號i和要返回所刪除的元素 80 int ListDelete(SeqList *L,int i,DataType *x) 81 { 82 int j; 83 if(L->size==0) 84 { 85 printf("順序表已空無數據元素可刪!\n"); 86 return 0; 87 } 88 else if(i<0||i>L->size-1) 89 { 90 printf("參數i不合法!\n"); 91 return 0; 92 } 93 else 94 { 95 *x=L->list[i]; 96 for(j=i+1;j<L->size;j++) 97 { 98 L->list[j-1]=L->list[j]; 99 } 100 L->size--; 101 102 return 1; 103 } 104 } 105 106 void ListShow(SeqList L) 107 { 108 int i; 109 110 printf("當前List表爲\n"); 111 for(i=0;i<L.size;i++) 112 { 113 printf("%d ",L.list[i]); 114 } 115 printf("\n共%d個元素\n\n",L.size); 116 117 return ; 118 } 119 120 main() 121 { 122 123 int i; 124 SeqList L; 125 DataType x; 126 127 //初始化順序表L 128 ListInitiate(&L); 129 //初始化順序表數據爲0-49 130 CreList(&L); 131 132 //顯示鏈表 133 ListShow(L); 134 135 //刪除操做 136 printf("1.刪除20位置元素\n"); 137 ListDelete(&L,20,&x); 138 printf("所刪除元素爲:%d\n",x); 139 ListShow(L); 140 141 //增長操做 142 printf("2.在1位置插入元素10\n"); 143 ListInsert(&L,1,10); 144 ListShow(L); 145 146 //查詢操做 147 printf("3.查詢30在鏈表中的位置:%d\n",ListLocate(L,30)); 148 printf("\n"); 149 printf("4.查詢20(已刪除)在鏈表中的位置:%d\n",ListLocate(L,20)); 150 151 return 0; 152 }
運行結果it
To be continued ,io
learning...(Date:2016-01-10)class