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(;isize;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;isize-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(;isize;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(;possize;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;isize-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(isize)
{
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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。