您的位置:首页 > 其它

顺序表一些基本操作(补充)

2018-03-22 18:10 281 查看
基于原本一些基础功能后,又新增一些实用功能,废话不多说,直接上代码
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 void SeqlistRemove(Seqlist *Seqlist,SeqlistType value);//删除顺序表中指定的值,如果存在重复元素,只删第一>    个
 25 void SeqlistRemoveAll(Seqlist *Seqlist,SeqlistType value);//删除顺序表中指定的值,如果存在重复,全部删除
 26 void SeqlistErase(Seqlist *Seqlist,size_t pos);//删除指定下标元素
 27 void SeqlistBubbleSort(Seqlist *Seqlist);//冒泡排序 

 28 #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 }
119 

120 //删除指定元素,若重复只删除第一个
121 void SeqlistRemove(Seqlist *Seqlist,SeqlistType value){
122     if (Seqlist == NULL)//防止非法输入
123       return;
124     SeqlistType i = 0;
125     for (; i < Seqlist->size;++i){
126         if (Seqlist->SeqlistArr[i] == value){
127             for(; i < Seqlist->size;++i){
128                 Seqlist->SeqlistArr[i] = Seqlist->SeqlistArr[i+1];
129             }
130         //  else
131         //    return 1;
132         }
133     }
134 }
135 //删除指定元素,若重复则全部删除
136 void SeqlistRemoveAll(Seqlist *Seqlist,SeqlistType value){
137     if (Seqlist == NULL)//防止非法输入
138       return;
139     SeqlistType i = 0;
140     SeqlistType k = 0;
141     for (; i < Seqlist->size;i++){
142         if (Seqlist->SeqlistArr[i]==value){
143             k = i;
144         for (;k<Seqlist->size;++k){
145             Seqlist->SeqlistArr[k] =Seqlist->SeqlistArr[k+1];
146         }
147         --Seqlist->size;
148         i--;//这里赋值0是为了重新开始,防止遗漏
149         continue;

150     }
151 }
152 }
153 
154 //删除指定下标元素
155 void SeqlistErase(Seqlist *Seqlist,size_t pos){
156     if (Seqlist == NULL)//防止非法输入
157       return;
158     if (pos > Seqlist->size)//非法输入
159       return;
160     else{
161         while (pos < Seqlist->size){
162           Seqlist->SeqlistArr[pos] = Seqlist->SeqlistArr[pos + 1];
163           pos++;
164         }
165     }
166     --Seqlist->size;
167 }
168 
169 //冒泡排序
170 void SeqlistBubbleSort(Seqlist *Seqlist){
171     SeqlistType i = 0;
172     SeqlistType j=0;
173     SeqlistType k = 0;
174     for (; i < Seqlist->size-1;i++){
175             if(Seqlist->SeqlistArr[i] > Seqlist->SeqlistArr[i+1]){
176                 k = Seqlist->SeqlistArr[i+1];
177                 Seqlist->SeqlistArr[i+1]=Seqlist->SeqlistArr[i];
178                 Seqlist->SeqlistArr[i]=k;
179                 i=0;

180             }
181     }

182 }

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');
 1
aefe
7     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     Seqlist 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 
 80 void TestSeqlistRemove(){
 81     Seqlist Seqlist;
 82     SeqlistInit(&Seqlist);
 83     SeqlistPushBack(&Seqlist,'a');
 84     SeqlistPushBack(&Seqlist,'b');
 85     SeqlistPushBack(&Seqlist,'c');
 86     SeqlistPushBack(&Seqlist,'c');
 87     SeqlistPushBack(&Seqlist,'c');
 88     SeqlistPushBack(&Seqlist,'d');
 89     printf("顺序表删除指定元素之前\n");

 90     SeqlistPrint(&Seqlist);
 91     SeqlistRemove(&Seqlist,'c');
 92     printf("顺序表删除指定元素之后\n");
 93     SeqlistPrint(&Seqlist);
 94 }
 95 void TestSeqlistRemoveAll(){
 96     Seqlist Seqlist;
 97     SeqlistInit(&Seqlist);
 98     SeqlistPushBack(&Seqlist,'a');
 99     SeqlistPushBack(&Seqlist,'b');
100     SeqlistPushBack(&Seqlist,'b');
101     SeqlistPushBack(&Seqlist,'c');
102     SeqlistPushBack(&Seqlist,'c');
103     SeqlistPushBack(&Seqlist,'c');
104     SeqlistPushBack(&Seqlist,'d');
105     printf("顺序表删除指定元素全删之前\n");
106     SeqlistPrint(&Seqlist);
107     SeqlistRemoveAll(&Seqlist,'b');
108     printf("顺序表删除指定元素全删之后\n");
109     SeqlistPrint(&Seqlist);
110 }
111 void TestSeqlistErase(){
112     Seqlist Seqlist;
113     SeqlistInit(&Seqlist);
114     SeqlistPushBack(&Seqlist,'a');
115     SeqlistPushBack(&Seqlist,'b');
116     SeqlistPushBack(&Seqlist,'b');
117     SeqlistPushBack(&Seqlist,'c');
118     SeqlistPushBack(&Seqlist,'c');
119     SeqlistPushBack(&Seqlist,'c');

120     SeqlistPushBack(&Seqlist,'d');
121     printf("顺序表删除指定下标元素之前\n");
122     SeqlistPrint(&Seqlist);
123     SeqlistErase(&Seqlist,3);
124     printf("顺序表删除指定下标元素之后\n");
125     SeqlistPrint(&Seqlist);
126 }
127 
128 void TestSeqlistBubbleSort(){
129     Seqlist Seqlist;
130     SeqlistInit(&Seqlist);
131     SeqlistPushBack(&Seqlist,'a');
132     SeqlistPushBack(&Seqlist,'c');
133     SeqlistPushBack(&Seqlist,'d');
134     SeqlistPushBack(&Seqlist,'b');
135     printf("顺序表冒泡排序之前\n");
136     SeqlistPrint(&Seqlist);
137     SeqlistBubbleSort(&Seqlist);
138     printf("顺序表冒泡排序之后\n");
139     SeqlistPrint(&Seqlist);
140     }
141 
142 
143 
144 int main(){
145     TestSeqlistInit();
146     TestSeqlistPushBack();
147     TestSeqlistPushStart();
148     TestSeqlistPopBack();
149     TestSeqlistPopStart();

150     TestSeqlistGet();
151     TestSeqlistGetpos();
152     TestSeqlistInsert();
153     TestSeqlistRemove();
154     TestSeqlistRemoveAll();
155     TestSeqlistErase();
156     TestSeqlistBubbleSort();
157     return 0;

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