C语言实现静态顺序表的实例详解
C语言实现静态顺序表的实例详解
线性表
定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。
接下来看看静态的顺序表,直接上代码:
SeqList.h
#define_CRT_SECURE_NO_WARNINGS1 #ifndef__SEQLIST_H__ #define__SEQLIST_H__ #include#include #include #include #defineMAX10 typedefintDataType; typedefstructSeqList { DataTypedata[MAX]; intsz; }SeqList,*pSeqList; voidInitSeqList(pSeqListps); voidPushBack(pSeqListps,DataTyped); voidPopBack(pSeqListps); voidPushFront(pSeqListps,DataTyped); voidPopFront(pSeqListps); voidDisplay(constpSeqListps); intFind(pSeqListps,DataTyped); voidInsert(pSeqListps,DataTyped,intpos); voidRemove(pSeqListps,DataTyped); voidRemoveAll(pSeqListps,DataTyped); voidReverse(pSeqListps); voidSort(pSeqListps); intBinarySearch(pSeqListps,DataTyped); #endif//__SEQLIST_H__
SeqList.c
#define_CRT_SECURE_NO_WARNINGS1
#include"SeqList.h"
voidInitSeqList(pSeqListps)
{
assert(ps);
ps->sz=0;
memset(ps->data,0,sizeof(DataType)*MAX);
}
voidPushBack(pSeqListps,DataTyped)
{
assert(ps);
if(ps->sz==MAX)
{
return;
}
ps->data[ps->sz]=d;
ps->sz++;
}
voidPopBack(pSeqListps)
{
assert(ps);
if(ps->sz==0)
{
return;
}
ps->sz--;
}
voidPushFront(pSeqListps,DataTyped)
{
inti=0;
assert(ps);
for(i=ps->sz;i>=1;i--)
{
ps->data[i]=ps->data[i-1];
}
ps->data[0]=d;
ps->sz++;
}
voidPopFront(pSeqListps)
{
inti=0;
assert(ps);
for(i=0;isz;i++)
{
ps->data[i]=ps->data[i+1];
}
ps->sz--;
}
voidDisplay(constpSeqListps)
{
inti=0;
assert(ps);
for(i=0;isz;i++)
{
printf("%d",ps->data[i]);
}
printf("\n");
}
intFind(pSeqListps,DataTyped)
{
inti=0;
assert(ps);
for(i=0;isz;i++)
{
if(ps->data[i]==d)
{
returni;
}
}
return-1;
}
voidInsert(pSeqListps,DataTyped,intpos)
{
inti=0;
assert(ps);
if(ps->sz==MAX)
{
return;
}
//方式一
//for(i=ps->sz-1;i>=pos;i--)
//{
//ps->data[i+1]=ps->data[i];
//}
//方式二
memmove(ps->data+pos+1,ps->data+pos,sizeof(DataType)*(ps->sz-pos));
ps->data[pos]=d;
ps->sz++;
}
voidRemove(pSeqListps,DataTyped)
{
inti=0;
intpos=0;
assert(ps);
pos=Find(ps,d);
if(pos!=-1)
{
for(i=pos;isz;i++)
{
ps->data[i]=ps->data[i+1];
}
ps->sz--;
}
}
voidRemoveAll(pSeqListps,DataTyped)
{
inti=0;
intpos=0;
assert(ps);
pos=Find(ps,d);
while((pos=Find(ps,d))!=-1)
{
for(i=pos;isz;i++)
{
ps->data[i]=ps->data[i+1];
}
ps->sz--;
}
}
voidReverse(pSeqListps)
{
intleft=0;
intright=ps->sz-1;
assert(ps);
while(leftdata[right];
ps->data[right]=ps->data[left];
ps->data[left]=tmp;
left++;
right--;
}
}
voidSort(pSeqListps)
{
inti=0;
intj=0;
assert(ps);
for(i=0;isz;i++)
{
for(j=0;jsz-i-1;j++)
{
if(ps->data[j]>ps->data[j+1])
{
DataTypetmp=ps->data[j];
ps->data[j]=ps->data[j+1];
ps->data[j+1]=tmp;
}
}
}
}
intBinarySearch(pSeqListps,DataTyped)
{
intleft=0;
intright=ps->sz-1;
while(left<=right)
{
intmid=left-((left-right)>>1);
if(d>ps->data[mid])
{
left=mid+1;
}
elseif(ddata[mid])
{
right=mid-1;
}
else
{
returnmid;
}
}
return-1;
}
test.c
#define_CRT_SECURE_NO_WARNINGS1
#include"SeqList.h"
voidtest1()
{
SeqListlist;
InitSeqList(&list);
PushBack(&list,1);
PushBack(&list,2);
PushBack(&list,3);
PushBack(&list,4);
Display(&list);
PopBack(&list);
Display(&list);
PopBack(&list);
Display(&list);
PopBack(&list);
Display(&list);
PopBack(&list);
Display(&list);
}
voidtest2()
{
intpos=0;
SeqListlist;
InitSeqList(&list);
PushFront(&list,1);
PushFront(&list,2);
PushFront(&list,3);
PushFront(&list,2);
PushFront(&list,4);
PushFront(&list,2);
Display(&list);
pos=Find(&list,3);
printf("%d\n",list.data[pos]);
PopFront(&list);
Display(&list);
PopFront(&list);
Display(&list);
PopFront(&list);
Display(&list);
PopFront(&list);
Display(&list);
}
voidtest3()
{
intpos=0;
SeqListlist;
InitSeqList(&list);
PushFront(&list,1);
PushFront(&list,2);
PushFront(&list,3);
PushFront(&list,2);
PushFront(&list,4);
PushFront(&list,2);
Display(&list);
Insert(&list,6,2);
Display(&list);
Remove(&list,1);
Display(&list);
RemoveAll(&list,2);
Display(&list);
}
voidtest4()
{
intpos=0;
SeqListlist;
InitSeqList(&list);
PushFront(&list,1);
PushFront(&list,2);
PushFront(&list,3);
PushFront(&list,2);
PushFront(&list,4);
Display(&list);
Reverse(&list);
Display(&list);
Sort(&list);
Display(&list);
pos=BinarySearch(&list,3);
printf("%d\n",list.data[pos]);
}
intmain()
{
test4();
system("pause");
return0;
}
动态顺序表的实现:https://www.nhooo.com/article/120876.htm
以上使用C语言动态顺序表的实现如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。