main函數:
#include <stdio.h>#include "./seq.h"int main(int argc, const char *argv[]){SeqList* list = create_seqList();insert_seqList(list,10);insert_seqList(list,100);insert_seqList(list,12);insert_seqList(list,23);show_seqList(list);int res;res=delete_seqList(list);printf("%d\n",res); insert_byid_seqList(list,66,1);show_seqList(list);int n=delete_byid_seqList(list,2);printf("被刪除的數據為%d\n",n);show_seqList(list);updata_byid(list,1);show_seqList(list);int x=search_byid(list,1);printf("查找的數據為%d\n",x);int idx=selectidx_bydata_seqList(list,10);printf("%d\n",idx);return 0;}
函數部分:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "./seq.h" 4 5 /* 6 * function: 創建順序表 7 * @param[ in] 8 * @param[out] 9 * @return 10 */ 11 //創建順序表 12 SeqList* create_seqList() 13 { 14 SeqList *list=(SeqList *)malloc(sizeof(SeqList));//申請對空間在函數結束后不會被銷毀 15 if(NULL == list)//定義順序表是否為空 16 { 17 return NULL; 18 } 19 list->pos=0;//初始化記錄下標位置為0 20 21 return list; 22 } 23 //在順序表尾部插入數據 24 void insert_seqList(SeqList * list,datatype num) 25 { 26 if(list->pos >= N) //判斷順序表是否滿了 27 { 28 printf("順序表已滿,插入失敗!\n"); 29 return; 30 } 31 list->data[list->pos] = num;//將要插入的數據給到末尾為的pos下標 32 (list->pos)++; //將pos后移 33 printf("插入成功!\n"); 34 return; 35 } 36 //根據下標插入數據 37 void insert_byid_seqList(SeqList *list,datatype num,int n)//n為需要插入數據的下標 38 { 39 int i; 40 if(n<0||n>list->pos) 41 { 42 printf("插入的位置非法!\n"); 43 } 44 45 if(n>list->pos || list->pos>=N) 46 { 47 printf("順序表已滿,插入失敗!\n"); 48 return; 49 } 50 for(i=list->pos;i>n;i--)//先將順序表中的數據后移 51 { 52 list->data[i]=list->data[i-1]; 53 } 54 list->data[n] = num; //將目標數據賦給目標下標 55 (list->pos)++; //將pos的值+1 56 printf("插入成功!\n"); 57 58 } 59 //根據下標刪除數據 60 datatype delete_byid_seqList(SeqList* list,int x) 61 { 62 int i; 63 datatype num;//先定義一個變量用來存儲要被刪除的數據,以免被覆蓋 64 if(x<0 || x>=list->pos) 65 { 66 printf("刪除失敗!\n"); 67 } 68 num=list->data[x]; 69 for(i=x;i<list->pos-1;i++)//先找到要刪除的下標位置,將后面的數據往前移 70 { 71 list->data[i]=list->data[i+1]; 72 } 73 list->pos--;//數據被刪除了,所以要將pos-1 74 75 return num; 76 } 77 //在順序表尾部刪除數據 78 datatype delete_seqList(SeqList* list) 79 { 80 if(list->pos<=0) 81 { 82 printf("順序表中沒有數據,刪除失敗!\n"); 83 } 84 list->pos--; 85 return list->data[list->pos]; 86 } 87 //根據下標修改數據 88 void updata_byid(SeqList* list,int x) 89 { 90 if(x>=list->pos||x<0) 91 { 92 printf("該下標非法,修改失敗!\n"); 93 return; 94 } 95 printf("請輸入數據>>>\n"); 96 scanf("%d",&list->data[x]); 97 return; 98 } 99 datatype search_byid(SeqList* list,int x)
100 {
101 if(x>=list->pos||x<0)
102 {
103 printf("該下標越界!\n");
104 }
105 return list->data[x];
106 }
107 /*
108 * function:
109 * @param [ in]
110 * @param [out]
111 * @return
112 */
113 //遍歷順序表
114 void show_seqList(SeqList* list)
115 {
116 int i;
117 if(0==list->pos)
118 {
119 printf("順序表中沒有數據!\n");
120 }
121 for(i=0;i<list->pos;i++)
122 {
123 printf("%d ",list->data[i]);
124 }
125 putchar(10);
126 return;
127 }
128 void selectdata_seqList(SeqList* list,datatype oldNum,datatype newNum)
129 {
130 int i=0;
131 for(i=0;i<list->pos;i++)
132 {
133 if(list->data[oldNum]==list->data[i])
134 {
135 list->data[newNum]=list->data[oldNum];
136 }
137 }
138 printf("更新完成!\n");
139 return;
140
141 }
142 int selectidx_bydata_seqList(SeqList* list,datatype num)
143 {
144 int i=0;
145 for(i=0;i<list->pos;i++)
146 {
147 if(num==list->data[i])
148 {
149 return i;
150 }
151 }
152 return -1;
153 }
頭文件:
#ifndef __FUNC_H__ #define __FUNC_H_ #define N 100 //順序表的容量 typedef int datatype; typedef struct//由于需要同時返回順序表及其下標位置,所以定義一個結構體 { datatype data[N]; //定義一個順序表 int pos; //記錄下標位置 }SeqList; SeqList* create_seqList(); void insert_seqList(SeqList* list,datatype num); void show_seqList(SeqList* list); datatype delete_seqList(SeqList* list); void insert_byid_seqList(SeqList *list,datatype num,int n); datatype delete_byid_seqList(SeqList* list,int x); void updata_byid(SeqList* list,int x); datatype search_byid(SeqList* list,int x); int selectidx_bydata_seqList(SeqList* list,datatype num); #endif