C++实现基于静态数组的顺序表
本文实例为大家分享了C++实现基于静态数组的顺序表,供大家参考,具体内容如下
实现的基本操作有:
1.初始化
2.尾插
3.尾删
4.头插
5.头删
6.查找任意元素
7.读任意位置元素
8.修改任意位置元素
9.查找指定元素值的下标
10.在任意位置插入元素
11.删除指定位置的元素
12.删除任意元素
13.打印数据
头文件seqlist.h:
#pragmaonce #include#include #include #definemaxsize1000//链表最多元素个数 typedefintseqType; typedefstructseqlist { seqTypearr[maxsize];//数据域,存放数据 size_tsize;//size_t是无符号长整型,是一种类型,size在数组中表示元素个数 }seqlist; voidPrintSeqList(seqlist*seq);//打印数据 voidprint_seqlist(char*s);//打印标题 voidseqlistInit(seqlist*seq);//链表初始化 voidseqlistPushBack(seqlist*seq,seqTypevalue);//尾插元素,value是插入元素的值 voidseqlistPopBack(seqlist*seq);//尾删元素,value是插入元素的值 voidseqlistPushHead(seqlist*seq,seqTypevalue);//头插元素 voidseqlistPopHead(seqlist*seq);//头删元素 seqTypeseqlistFind(seqlist*seq,seqTypedata);//查找任意元素 seqTypeseqlistRead_pos(seqlist*seq,size_tpos);//读取任意位置的元素 size_tseqlistFind_pos(seqlist*seq,seqTypevalue);//查找指定元素的下标 seqTypeseqlistModify(seqlist*seq,size_tpos,seqTypedata);//修改任意位置的元素 voidseqlistInsert_pos(seqlist*seq,size_tpos,seqTypedata);//在任意位置插入元素 voidseqlistErase_pos(seqlist*seq,size_tpos);//删除任意位置的元素 voidseqlistRemove(seqlist*seq,seqTypedata);//删除元素
实现文件seqlist.c
#include"seqlist.h" voidPrintSeqList(seqlist*seq)//打印数据 { size_ti=0; if(seq->size==0) { printf("线性表为空,打印结束\n"); return; } for(i=0;isize;i++) { printf("下标为%d的元素是:%d\n",i,seq->arr[i]); } printf("\n"); } voidprint_seqlist(char*s)//打印标题 { inti=0; printf("%s\n",s); printf("\n"); } voidseqlistInit(seqlist*seq)//链表初始化 { assert(seq); seq->size=0;//有效元素赋值为0; } voidseqlistPushBack(seqlist*seq,seqTypevalue)//尾插元素,value是插入元素的值 { assert(seq);//判断指针是否为空 if(seq->size==maxsize) { printf("元素已满,无法插入\n"); return; } else seq->arr[seq->size++]=value; } voidseqlistPopBack(seqlist*seq)//尾删元素,value是插入元素的值 { assert(seq);//判断指针是否为空 if(seq->size==0) { printf("内容已为空,无法删除\n"); return; } else seq->size--; } voidseqlistPushHead(seqlist*seq,seqTypevalue)//头插元素 { assert(seq);//判断指针是否为空 if(seq->size==maxsize) { printf("元素已满,无法插入\n"); return; } else { inti=seq->size-1; for(;i>=0;i--) { seq->arr[i+1]=seq->arr[i]; } seq->arr[0]=value; seq->size++; } } voidseqlistPopHead(seqlist*seq)//头删元素 { assert(seq);//判断指针是否为空 if(seq->size==0) { printf("内容已为空,无法删除\n"); return; } else { size_ti=1; for(;i size;i++) { seq->arr[i-1]=seq->arr[i]; } seq->size--; } } seqTypeseqlistFind(seqlist*seq,seqTypedata)//查找任意元素 { size_ti=0; assert(seq);//判断指针是否为空 if(seq->size==0) { printf("线性表为空\n"); return-1; } for(i=0;i size-1;i++) { if(seq->arr[i]==data) { returnseq->arr[i]; } } return-1; } seqTypeseqlistRead_pos(seqlist*seq,size_tpos)//读取任意位置的元素 { assert(seq);//判断指针是否为空 if(seq->size==0) { printf("内容为空,无法读取内容\n"); return-1; } elseif(pos>seq->size) { printf("读取位置错误\n"); } else returnseq->arr[pos]; } size_tseqlistFind_pos(seqlist*seq,seqTypevalue)//查找指定元素的下标 { assert(seq);//判断指针是否为空 size_ti=0; for(;i size;i++) { if(seq->arr[i]==value) returni; } return-1; } seqTypeseqlistModify(seqlist*seq,size_tpos,seqTypedata)//修改任意位置元素 { assert(seq);//判断指针是否为空 if(seq->size==0) { printf("内容为空,无法修改内容\n"); return-1; } for(;pos size;pos++) { seq->arr[pos]=data; returnseq->arr[pos]; } } voidseqlistInsert_pos(seqlist*seq,size_tpos,seqTypedata)//在任意位置插入元素 { assert(seq); if(seq->size==maxsize) { printf("内容已满,无法继续插入内容\n"); return; } elseif(pos>seq->size) { printf("非法位置,不允许插入\n"); return; } else { size_tm=seq->size; for(m=seq->size;m>pos;m--) { seq->arr[m]=seq->arr[m-1]; } seq->arr[pos]=data; seq->size++; } } voidseqlistErase_pos(seqlist*seq,size_tpos)//删除任意位置的元素 { assert(seq); if(seq==NULL) { printf("内容已为空!\n"); return; } elseif(pos>seq->size) { printf("该位置无法删除!\n"); return; } else { size_ti; for(i=pos;i size-1;i++) { seq->arr[i]=seq->arr[i+1]; }seq->size--; } } voidseqlistRemove(seqlist*seq,seqTypedata)//删除元素 { assert(seq);//判断指针是否为空 size_ti=0; i=seqlistFind_pos(seq,data); if(i>=0) { while(i size) { seq->arr[i]=seq->arr[i+1]; i++; } seq->size--; return; } else { printf("没有找到该元素"); return; } }
在进行插入、删除等操作中,若对元素的位置移动不清楚的借助画图能更好地理解。
测试函数test.c
#define_CRT_SECURE_NO_WARNINGS1 #include"seqlist.h" voidTest_PushBack()//测试顺序表尾插元素 { print_seqlist("*****尾插3个元素至顺序表*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); PrintSeqList(&seq); } voidTest_PopBack()//测试顺序表尾删元素 { print_seqlist("*****尾删顺序表中的1个元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); PrintSeqList(&seq); seqlistPopBack(&seq); PrintSeqList(&seq); } voidTest_PushHead()//头插元素 { print_seqlist("*****头插顺序表中的3个元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushHead(&seq,2); seqlistPushHead(&seq,4); seqlistPushHead(&seq,6); PrintSeqList(&seq); } voidTest_PopHead()//头删元素 { print_seqlist("*****头删顺序表中的1个元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushHead(&seq,2); seqlistPushHead(&seq,4); seqlistPushHead(&seq,6); PrintSeqList(&seq); seqlistPopHead(&seq); PrintSeqList(&seq); } voidTest_Find()//查找任意元素 { print_seqlist("*****查找顺序表中的任意元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); PrintSeqList(&seq); inttemp=0; temp=seqlistFind(&seq,2); printf("查找到的元素是%d\n",temp); printf("\n"); } voidTest_Read_pos()//读取任意位置元素 { print_seqlist("*****查找顺序表中的任意位置的元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); PrintSeqList(&seq); inttemp=0; temp=seqlistRead_pos(&seq,1); printf("下标为1的元素是%d\n",temp); printf("下标为4的元素是:"); seqlistRead_pos(&seq,4); printf("\n"); } voidTest_seqlistFind_pos()//测试查找指定元素的下标 { print_seqlist("*****查找顺序表中指定元素的下标*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); seqlistPushBack(&seq,7); PrintSeqList(&seq); size_tpos=seqlistFind_pos(&seq,4); size_tpos1=seqlistFind_pos(&seq,9); printf("元素4的下标为:%d\n",pos); printf("元素9的下标为:%d,元素不存在\n",pos1); printf("\n"); } voidTest_seqlistModify()//修改任意位置元素 { print_seqlist("*****修改顺序表中任意元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,6); seqlistPushBack(&seq,7); PrintSeqList(&seq); inttemp=seqlistModify(&seq,1,3); inttemp1=seqlistModify(&seq,2,8); PrintSeqList(&seq); printf("修改下标为1的元素为:%d\n",temp); printf("修改下标为2的元素为:%d\n",temp1); } voidTest_seqlistInsert()//在任意位置插入元素 { print_seqlist("*****在顺序表中任意位置插入元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,5); seqlistPushBack(&seq,6); PrintSeqList(&seq); seqlistInsert_pos(&seq,2,3); PrintSeqList(&seq); seqlistInsert_pos(&seq,8,9); } voidTest_seqlistErase_pos()//删除任意位置元素 { print_seqlist("*****在顺序表中删除任意位置元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,5); seqlistPushBack(&seq,6); PrintSeqList(&seq); seqlistErase_pos(&seq,1); seqlistErase_pos(&seq,4); PrintSeqList(&seq); } voidTest_Remove()//删除任意元素 { print_seqlist("*****在顺序表中删除任意元素*****"); seqlistseq; seqlistInit(&seq); seqlistPushBack(&seq,2); seqlistPushBack(&seq,4); seqlistPushBack(&seq,5); seqlistPushBack(&seq,6); PrintSeqList(&seq); seqlistRemove(&seq,4); PrintSeqList(&seq); } intmain() { Test_PushBack(); Test_PopBack(); Test_PushHead(); Test_PopHead(); Test_Find(); Test_Read_pos(); Test_seqlistFind_pos(); Test_seqlistModify(); Test_seqlistInsert(); Test_seqlistErase_pos(); Test_Remove(); return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。