基于静态数组的顺序表的基本操作
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 }
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 }
相关文章推荐
- 实现基于静态数组的顺序表的以下基本操作:
- 基于静态数组的顺序表的一些基本操作(1)
- 基于静态数组的顺序表的一些基本操作(2)
- 实现基于静态数组的顺序表的以下基本操作:
- 实现基于静态数组的顺序表的以下基本操作(进阶部分)
- linux下使用vim实现基于静态数组的顺序表的一些基本操作
- 实现基于静态数组的顺序表的以下基本操作:
- 静态数组顺序表的基本操作实现
- !-- 基于静态数组的顺序表相关操作C语言实现 --!
- 数组表示的线性表(顺序表)的基本操作,以及合并两个非递减数组线性表
- 数据结构实验——基于数组的栈基本操作
- 静态顺序表的基本操作
- 静态顺序表的基本操作
- 实现基于静态数组的顺序表
- c 语言 静态顺序表 基本操作
- 静态顺序表的基本操作
- 静态顺序表的基本操作
- 基于顺序栈的基本操作的实现
- 静态顺序表的基本操作
- 算法-基础(一)数组基本操作 和 静态方法(后面编写算法的时候会用到)