您的位置:首页 > 运维架构 > Linux

基于静态数组的顺序表的基本操作

2018-03-11 23:48 856 查看
环境为Linux,功能如下:
1. 静态数组的初始化
2. 尾插功能
3. 尾删功能
4. 头插功能
5. 头删功能 
6. 读任意位置元素功能
7. 修改任意位置元素功能
8. 查找指定元素值的下标功能
9. 在任意位置插入元素功能

以下是代码详细部分:
//Seqlist.h

  1 #ifndef __SEQLIST_H__
  2 #define __SEQLIST_H__
  3 
  4 #include <stdio.h>
  5 #include <stdlib.h>
  6 
  7 #define SeqlistMAX_SIZE 10//方便以后更改数组大小
  8 typedef char SeqlistType;//让类型可以重新定义
  9 typedef struct Seqlist{
 10     SeqlistType SeqlistArr[SeqlistMAX_SIZE];
 11     size_t size;
 12 }Seqlist;//静态数组的创建
 13 
 14 void SeqlistInit(Seqlist *Seqlist);//静态数组的初始化
 15 void SeqlistPrint(Seqlist *Seqlit);//顺序表的打印
 16 void SeqlistPushBack(Seqlist *Seqlist, SeqlistType value);//静态数组尾插
 17 void SeqlistPopBack(Seqlist *Seqlist);//静态数组尾删
 18 void SeqlistPushStart(Seqlist *Seqlist,SeqlistType value);//静态数组头插
 19 void SeqlistPopStart(Seqlist *Seqlist);//静态数组头删
 20 SeqlistType SeqlistGet(Seqlist *Seqlist,size_t pos);//读取任意位置
 21 void SeqlistSetlist(Seqlist *Seqlist,size_t pos,SeqlistType value);//修改任意位置
 22 size_t SeqlistGetpos(Seqlist *Seqlist,SeqlistType value);//查找指定元素的下标
 23 void SeqlistInsert(Seqlist *Seqlist,size_t pos,SeqlistType value);//指定位置插入元素

 24 #endif

//Seqlist.c

  1 #include "Seqlist.h"
  2 
  3 //静态数组初始化功能
  4 void SeqlistInit(Seqlist *Seqlist){
  5     if (Seqlist == NULL)
  6       return;//防止非法输入
  7     Seqlist->size = 0;
  8 }
  9 //顺序表的打印:
 10 void SeqlistPrint(Seqlist *Seqlist){
 11     if(Seqlist == NULL)//防止非法输入
 12       return;
 13     printf("size = %ld\n\n",Seqlist->size);
 14     size_t i = 0;
 15     for (;i < Seqlist->size;++i){
 16         printf("[%p:][%c]\n",&Seqlist->SeqlistArr[i],Seqlist->SeqlistArr[i]);
 17     }
 18 }
 19 //顺序表尾插
 20 void SeqlistPushBack(Seqlist *Seqlist,SeqlistType value){
 21     if (Seqlist == NULL)//防止非法输入
 22       return;
 23     if (Seqlist->size >SeqlistMAX_SIZE-1){
 24         return;
 25     }
 26     else{
 27         Seqlist->SeqlistArr[Seqlist->size] = value;
 28         Seqlist->size++;
 29     }
 30 }
 31 //顺序表尾删
 32 void SeqlistPopBack(Seqlist *Seqlist){
 33     if (Seqlist == NULL)//防止非法输入
 34       return;
 35     if (Seqlist->size == 0)
 36       return;
 37     else
 38       Seqlist->size--;
 39 }
 40 //顺序表头插
 41 void SeqlistPushStart(Seqlist *Seqlist,SeqlistType value){
 42     if (Seqlist == NULL)//防止非法输入
 43       return;
 44     if (Seqlist->size>SeqlistMAX_SIZE){
 45         return;
 46     }
 47     else{
 48         SeqlistType i = Seqlist->size-1;
 49         for (;i>=0;--i){
 50             Seqlist->SeqlistArr[i+1] =Seqlist->SeqlistArr[i];
 51         }
 52         Seqlist->SeqlistArr[0] = value;
 53         ++Seqlist->size;
 54     }
 55 }
 56 //顺序表头删
 57 void SeqlistPopStart(Seqlist *Seqlist){
 58     if (Seqlist == NULL)//防止非法输入
 59       return;
 60     if (Seqlist->size>SeqlistMAX_SIZE){
 61         return;
 62     }
 63     else{
 64         SeqlistType i = 0;
 65         for (;i<Seqlist->size;++i){
 66             Seqlist->SeqlistArr[i] =Seqlist->SeqlistArr[i+1];
 67         }
 68         --Seqlist->size;
 69     }
 70 }
 71 //读取下标为pos的元素
 72 SeqlistType SeqlistGet(Seqlist *Seqlist,size_t pos){
 73     if (Seqlist == NULL)//防止非法输入
 74       return;
 75     if (pos > Seqlist->size-1)
 76       return;//pos的值大于顺序表元素个数
 77     else
 78       return Seqlist->SeqlistArr[pos];
 79 }
 80 //修改下标为pos的元素
 81 void SeqlistSetlist(Seqlist* Seqlist,size_t pos,SeqlistType value){
 82     if (Seqlist == NULL)//防止非法输入
 83       return;
 84     if (pos > Seqlist->size-1)
 85       return;//pos的值大于顺序表元素个数
 86 
 87     else
 88       Seqlist->SeqlistArr[pos] = value;
 89 }
 90 //查找指定元素的下标
 91 size_t SeqlistGetpos(Seqlist *Seqlist, SeqlistType value){
 92     if (Seqlist == NULL)//防止非法输入
 93       return;
 94     size_t i=0;
 95     for (;i<Seqlist->size;i++){
 96         if (Seqlist->SeqlistArr[i] == value)
 97           return i;
 98     }
 99     return -1;//这里为了给予一个错误提示
100 }
101 //指定位置插入元素
102 void SeqlistInsert(Seqlist *Seqlist,size_t pos,SeqlistType value){
103     if (Seqlist == NULL)//防止非法输入
104       return;
105     if (Seqlist->size >= SeqlistMAX_SIZE)
106       return;
107     else if (pos > Seqlist->size-1){
108         return;//插入位置不存在
109     }
110     else{
111         SeqlistType i = Seqlist->size;
112             for (;i>=pos;i--){
113                 Seqlist->SeqlistArr[i+1] = Seqlist->SeqlistArr[i];
114             }
115         Seqlist->SeqlistArr[pos] = value;
116     }
117     ++Seqlist->size;

118 }

//test.c  测试部分
  1 #include "Seqlist.h"
  2 void TestSeqlistInit(){
  3     Seqlist Seqlist;
  4     SeqlistInit(&Seqlist);
  5     SeqlistPrint(&Seqlist);
  6 }
  7 
  8 void TestSeqlistPushBack(){
  9     Seqlist Seqlist;
 10     SeqlistInit(&Seqlist);
 11     printf("顺序表尾插之前\n");
 12     SeqlistPrint(&Seqlist);
 13     SeqlistPushBack(&Seqlist,'a');
 14     SeqlistPushBack(&Seqlist,'b');
 15     SeqlistPushBack(&Seqlist,'c');
 16     SeqlistPushBack(&Seqlist,'d');
 17     printf("顺序表尾插之后\n");
 18     SeqlistPrint(&Seqlist);
 19 }
 20 
 21 void TestSeqlistPopBack(){
 22     Seqlist Seqlist;
 23 //  SeqlistInit(&Seqlist);
 24     printf("顺序表尾删之前\n");
 25     SeqlistPrint(&Seqlist);
 26     SeqlistPopBack(&Seqlist);
 27     printf("顺序表尾删之后\n");
 28     SeqlistPrint(&Seqlist);
 29 }
 30 
 31 void TestSeqlistPushStart(){
 32     Seqlist Seqlist;
 33     //SeqlistInit(&Seqlist);
 34     printf("顺序表头插之前\n");
 35     SeqlistPrint(&Seqlist);
 36     SeqlistPushStart(&Seqlist,'e');
 37     printf("顺序表头插之后\n");
 38     SeqlistPrint(&Seqlist);
 39 }
 40 
 41 void TestSeqlistPopStart(){
 42     Seqlist Seqlist;
 43 //  SeqlistInit(&Seqlist);
 44     printf("顺序表头删之前\n");
 45     SeqlistPrint(&Seqlist);
 46     SeqlistPopStart(&Seqlist);
 47     printf("顺序表头删之后\n");
 48     SeqlistPrint(&Seqlist);
 49 }
 50 
 51 SeqlistType TestSeqlistGet(){
 52     Seqli
4000
st Seqlist;
 53     printf("寻找下标为1的元素:");
 54     printf("[%c]\n\n",SeqlistGet(&Seqlist,1));
 55 }
 56 
 57 void TestSeqlistSetlist(){
 58     Seqlist Seqlist;
 59     printf("修改下标为1的元素前:");
 60     SeqlistPrint(&Seqlist);
 61     SeqlistSetlist(&Seqlist,1,'f');
 62     printf("修改下表为1的元素后:");
 63     SeqlistPrint(&Seqlist);
 64 }
 65 SeqlistType TestSeqlistGetpos(){
 66     Seqlist Seqlist;
 67     printf("寻找元素c的下标:");
 68     printf("其下标为[%d]\n\n",SeqlistGetpos(&Seqlist,'c'));
 69 }
 70 
 71 void TestSeqlistInsert(){
 72     Seqlist Seqlist;
 73     printf("在插入之前:");
 74     SeqlistPrint(&Seqlist);
 75     SeqlistInsert(&Seqlist,2,'m');
 76     printf("在插入之后:");
 77     SeqlistPrint(&Seqlist);
 78 }
 79     int main(){
 80     TestSeqlistInit();
 81     TestSeqlistPushBack();
 82     TestSeqlistPushStart();
 83     TestSeqlistPopBack();
 84     TestSeqlistPopStart();
 85     TestSeqlistGet();
 86     TestSeqlistGetpos();
 87     TestSeqlistInsert();
 88     return 0;

 89 }











  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux