数据结构---静态顺序表

本文介绍了如何在Linux系统下实现静态顺序表,包括结构体定义、初始化、插入、删除、读取、修改和查找等功能。代码经过测试,确保功能正确性,适合初学者学习和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单静态顺序表实现

本篇全部代码都在Linux系统下完成

概念:

用一段地址连续的单元依次存储数据元素的线性结构,顺序表又分为静态顺序表和动态顺序表

功能:

  • 初始化顺序表
  • 在表尾插入数据
  • 在表头插入数据
  • 删除表尾数据
  • 删除表头数据
  • 读取任意位置元素
  • 修改任意位置元素
  • 查找指定元素值的下标
  • 在表中任意位置插入元素
首先创建一个结构体Seqlist,在结构体中我们定义了一个数组seqlist,用来存放数据,以及一个无符号整形变量size,用来控制顺序表有效数据的个数。
即我们通过一个简单的数组实现顺序表的一些功能
  8 #define SeqlistMax 50
  9 typedef char Type;
 10 typedef struct Seqlist{
 11     Type seqlist[SeqlistMax];
 12     size_t size;
 13     }Seq;
接下来我们将顺序表初始化一下
  4 void SeqlistInit(Seq* seq)
  5 {
  6     if(NULL == seq){
  7         printf("INPUT ERROR!\n");
  8         return;
  9         }
 10     seq->size = 0;
 11 } 
我们在用指针当做形参时,必须要判断其是否为空,如果不为空,才能进行接下来的工作。初始化完成之后我们再进行接下来的功能实现,函数内部只实现一个数据的插入与删除,如果想进行多个数据的操作,可以在测试函数中实现。

  • 尾部插入
 26 void SeqlistPushBack(Seq* seq ,Type A)
 27 {
 28     
 29     if(NULL == seq){
 30         printf("INPUT ERROR!\n");
 31         return;
 32         }
 33     if(seq->size>=SeqlistMax){
 34         printf("The excel is full\n");
 35         return;
 36         }//判断顺序表是否已存满数据
 37       seq->seqlist[seq->size]= A;
 38       seq->size++;//size+1 即说明表中插入一个数据,在这里我们通过size的大小来简单
 39 }                 //地控制表的大小(不是实际大小,而是有效数据的个数)

  • 尾部删除
 41 void SeqlistPopBack(Seq* seq)
 42 {
 43     if(NULL == seq){
 44         printf("INPUT ERROR!\n");
 45         return;
 46         }
 47     if(seq->size==0){
 48         printf("The excel is empty\n");
 49         return;
 50         }//判断顺序表是否为空
 51     seq->size--;//size--说明有效数据减一,即原来表尾的数据已经不在有效范围内
 52 }               

  • 头部插入
 53 void SeqlistPushTop(Seq* seq ,Type A)
 54 {
 55     
 56     if(NULL == seq){
 57         printf("INPUT ERROR!\n");
 58         return;
 59         }
 60     if(seq->size>=SeqlistMax){
 61         printf("The excel is full\n");
 62         return;
 63     }
 64     int i=0;
 65     for(i=seq->size;i>0;i--){
 66         seq->seqlist[i]=seq->seqlist[i-1];
 67         }//将原有有效数据统统向后移一位
 68     seq->seqlist[i]=A;//头部原有数据被新数据代替,实现插入功能
 69     seq->size++;//插入一个数据,size便需要加1
 70 }

  • 头部删除
 72 void SeqlistPopTop(Seq* seq)
 73 {
 74     if(NULL == seq){
 75         printf("INPUT ERROR!\n");
 76         return;
 77         }
 78 
 79     if(seq->size==0){
 80         printf("The excel is empty\n");
 81         return;
 82         }
 83     int i=0;
 84     for(i=0;i<seq->size;i++){
 85         seq->seqlist[i]=seq->seqlist[i+1];
 86         }//将原有有效数据统统向前移动一位
 87     seq->size--;//删除一个数据,size--,说明有效数据减一
 88 }

  • 读取任意位置元素
 90 void SeqlistReadPos(Seq* seq,int Pos)//这里的Pos并不是数组下标的意思,例如该顺序表有效数据为4,则Pos值若为3的话
 91 {                                    //便是第3个元素,即下标为2的数组元素,因为数组的起始下标为0
 92 
 93     if(NULL == seq){
 94         printf("INPUT ERROR!\n");
 95         return;
 96         }
 97     if(seq->size==0){
 98         printf("The excel is empty\n");
 99         return;
100     }
101     if((Pos>seq->size)||(Pos<=0)){//控制Pos值输入合法,在有效范围内
102         printf("INPUT ERROR!\n");
103         return;
104     }
105     printf("[%c]\n",seq->seqlist[Pos-1]);   
106 }

  • 修改任意位置元素
109 void SeqlistReplacePos(Seq* seq,int Pos,Type A)
110 {
111 
112     if(NULL == seq){
113         printf("INPUT ERROR!\n");
114         return;
115         }   
116     if(seq->size==0){
117         printf("The excel is empty\n");
118         return;
119     }
120     if((Pos>seq->size)||(Pos<=0)){
121         printf("INPUT ERROR!\n");
122         return;
123         }
124     seq->seqlist[Pos-1]=A;
125 }

  • 查找任意元素值的下标(这里的下标不是数组里的元素下标,而是该元素在有效数据内的排序)
127 void SeqlistFindPos(Seq* seq,Type A)
128 {
129 
130     if(NULL == seq){
131         printf("INPUT ERROR!\n");
132         return;
133         }   
134     if(seq->size==0){
135         printf("The excel is empty\n");
136         return;
137     }
138     int i = 0;
139     for(i=0;i<seq->size;i++){
140         if(seq->seqlist[i]==A){
141             printf("%d  ",i+1);
142             }
143         }
144     printf("\n");
145 }

  • 在表中任意位置插入元素
147 void SeqlistPushPos(Seq* seq,int Pos,Type A)
148 {
149 
150     if(NULL == seq){
151         printf("INPUT ERROR!\n");
152         return;
153         }   
154     if(seq->size>=SeqlistMax){
155         printf("The excel is full\n");
156         return;
157     }
158     if((Pos>seq->size)||(Pos<=0)){
159         printf("INPUT ERROR!\n");
160         return;
161         }
162     int i = 0;
163     for(i=seq->size;i>=Pos;i--){
164         seq->seqlist[i]=seq->seqlist[i-1];
165         }
166         seq->seqlist[i]=A;
167         seq->size++;
168 }
至此,基本功能已实现完,希望各位在写好一个功能代码时便再写一个简单的测试代码,保证其正确性,以上代码已经经过测试,可以实现指定功能,希望浏览这篇文章的人能够有所收获,或者向我提出宝贵的意见,谢谢浏览
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值