C-线性顺序表的增删改查

  闲来无事,练练手,写点C代码,对于线性表的简单操作。编辑工具Notpad++,编译工具tcc.

  1 /*
  2 *the sequence of the list
  3 *author:JanneLee
  4 *data:2013-10-26
  5 */
  6 
  7 #include <stdio.h>
  8 #include <stdlib.h>/*rand()*/
  9 #include <time.h>/*time()*/
 10 #ifdef DEBUG
 11 #include <assert.h>
 12 #endif
 13 #define MAX_SIZE 1000
 14 #define N 10
 15 typedef struct Sqlist{
 16     int data[MAX_SIZE];
 17     int length;
 18 }Sqlist;
 19 int InsertElement(Sqlist *s,int pos,int val);
 20 int DelElemByPos(Sqlist *s,int pos);
 21 int DelElemByVal(Sqlist *s,int val);
 22 int UpdateElemByPos(Sqlist *s,int pos,int val);
 23 int FindElemByVal(Sqlist s,int val);
 24 int ShowSqlist(Sqlist s);
 25 int main(){
 26     printf("====program begin========
");
 27     Sqlist s;
 28     s.length=0;
 29     //InsertElement(&s,0,10);
 30     //InsertElement(&s,1,20);
 31     /*generate a sequence with random value*/
 32     /*begin*/
 33     int i=0;
 34     srand(time(NULL));
 35     for(;i<N;i++){
 36         InsertElement(&s,i,rand()%N);
 37     }
 38     /*end*/
 39     //DelElemByPos(&s,3);
 40     //DelElemByVal(&s,3);
 41     UpdateElemByPos(&s,3,3);
 42     printf("pos:%d
",FindElemByVal(s,3));
 43     ShowSqlist(s);
 44     printf("======program end======
");
 45     return 0;
 46 }
 47 /*
 48 *function name:InsertElement
 49 *feature:insert a value in the position of pos
 50 *parameters:*s-the sequence of the list,pos-the insert position,val-the value
 51 *there if the c++ we can use &s,the c we shoud use star s to make the s change.
 52 *return: if 1-insert succeed,if 0 the failed
 53 *author:Jannelee
 54 *data:2013-10-26
 55 */
 56 int InsertElement(Sqlist *s,int const pos,int const val){
 57     int ret_flag=1;
 58     if(pos>MAX_SIZE||pos<0){
 59         ret_flag=0;
 60     }else{
 61         int i=0; 
 62         for(i=pos;i<s->length;i++){
 63             s->data[i+1]=s->data[i];
 64         }
 65         s->data[pos]=val;
 66         s->length++;
 67     }
 68     return ret_flag;
 69 }
 70 /*
 71 *function name:ShowSqlist
 72 *feature:show the sequence of the list
 73 *parameters:s-the sequence
 74 *return :1-succeed,0-error
 75 *author:JanneLee
 76 *date:2013-10-26
 77 */
 78 int ShowSqlist(Sqlist const s){
 79     int ret_flag=1;
 80     printf("=========show the Sqlist===========
");
 81     int i=0;
 82     for(;i<s.length;i++){
 83         printf("%d ",s.data[i]);
 84     }
 85     printf("
==========the show end=============
");
 86     return ret_flag;
 87 }
 88 /*
 89 *function name:DelElemByPos
 90 *feature:delete the element by the position of the element in the sequence.
 91 *parameters:*s- the sequence ,pos-the position for delete
 92 *return : if 1- succeed ,0-faild
 93 *author:JanneLee
 94 *date:2013-10-26
 95 */
 96 int DelElemByPos(Sqlist *s,int pos){
 97     int ret_flag=1;
 98     if(pos<0||s->length<pos){
 99         ret_flag=0;
100     }else{
101         int i=0;
102         for(;i<s->length;i++){
103             s->data[i]=s->data[i+1];
104         }
105         s->length--;
106     }
107     return ret_flag;
108 }
109 /*
110 *function name:DelElemByVal
111 *feature:delete the elements by the value in the sequence
112 *this may delect every elements have the same value of val in the sequence.
113 *parameters:*s - the sequence , val- the value
114 *reutrn : 1- succeed ,0 -faild
115 *author:JanneLee
116 *date:2013-10-26
117 */
118 int DelElemByVal(Sqlist *s ,int val){
119     int ret_flag=1;
120     int i=0,j=0;
121     for(;i<s->length;i++){
122         if(s->data[i]==val){
123             for(j=i;j<s->length;j++){
124                 s->data[j]=s->data[j+1];
125                 s->length--;
126             }
127         }else{
128             ret_flag=0;
129         }
130     }
131     return ret_flag;
132 }
133 /*
134 *function name:UpdateElemByPos
135 *feature:update the value of the sequence int the position of pos
136 *parameters:*s - the sequence,pos-the position,val-the value
137 *return:-1-no this value,0-faild
138 *author:JanneLee
139 *date:2013-10-26
140 */
141 int UpdateElemByPos(Sqlist *s,int pos,int val){
142     int ret_flag=1;
143     if(pos<0||pos>s->length){
144         ret_flag=0;
145     }else{
146         s->data[pos]=val;
147     }
148     return ret_flag;
149 }
150 /*
151 *function name:FindElemByVal
152 *feature:get the vale of the position in the sequence,if the value has repeat in the 
153 *sequence ,just find the first position in the sequence.
154 *parameters:s - the sequence,val-the value
155 *return:-1-no this value,otherwise ,the position of the value
156 *author:JanneLee
157 *date:2013-10-26
158 */
159 int FindElemByVal(Sqlist s,int val){
160     printf("the sequence length:%d
",s.length);
161     int ret_pos=-1;
162     int i=0;
163     for(;i<s.length;i++){
164         if(val==s.data[i]){
165             ret_pos=i+1;
166             i=s.length+1;
167         }
168     }
169     return ret_pos;
170 }
原文地址:https://www.cnblogs.com/accipiter/p/3388266.html