顺序表的实现(头插,头删尾插,尾删)

来源:互联网 发布:电视上安装网络机顶盒 编辑:程序博客网 时间:2024/05/29 04:41

刚学数据结构,实现一个基本的顺序表结构,顺序链表的实现,程序里包括了头插,头删,尾插,尾删,任意位置删除,任意位置插入,任意位置替换等基本函数。先了解什么是顺序表结构。

顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

顺序表特点:将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。




以下为程序:

首先建一个头文件myC.h
#include<stdlib.h>#include<Windows.h>#include<assert.h>typedef int Datatype;#define Max 2typedef struct Seqlist{Datatype *arr;size_t size;// 有效数据个数 size_t capicity;//容量}Seqlist;void Seqprin(Seqlist *pSeq);//读出void SeqInit(Seqlist* pSeq); //初始化void SeqDestory(Seqlist* pSeq); //销毁创建的空间Seqlist* SeqCheckFull(Seqlist *pSeq);//若空间不够则进行扩容void SeqPushBack(Seqlist* pSeq,Datatype x);//尾插void SeqPopback(Seqlist*pSeq);//尾删void SeqPushFront(Seqlist* pSeq,Datatype x);//头插void SeqPopFront(Seqlist* pSeq);//头删void SeqInsert(Seqlist *pSeq,size_t pos,Datatype x);//任意位置插入数据void SeqErase(Seqlist *pSeq,size_t pos);//把pos位置的数据删除int SeqFind(Seqlist *pSeq,Datatype x);//查找一个数,若找到并返回它void SeqAt(Seqlist *pSeq,size_t pos,Datatype x);//替换指定位置的值void BubbleSort(Seqlist *pSeq);//用冒泡排序法排列void SelectSort(Seqlist *pSeq);//用选择排序法排序#endif

然后是主程序  1.c
#include"myC.h"int main(){Seqlist Seqlist;//定义结构体名SeqInit(&Seqlist);SeqPushBack(&Seqlist,1);//尾插SeqPushBack(&Seqlist,6);//尾插SeqPushBack(&Seqlist,3);//尾插SeqPushBack(&Seqlist,4);//尾插//SeqPopback(&Seqlist);//尾删(测试专用)//SeqPushFront(&Seqlist,4);//头插(测试专用)//SeqPopFront(&Seqlist);//头删(测试专用)//SeqInsert(&Seqlist,2,0);//SeqErase(&Seqlist,2);//SeqFind(&Seqlist,2);//SeqAt(&Seqlist,2,0);BubbleSort(&Seqlist);Seqprin(&Seqlist);//读出所有数据system("pause");return 0;}void Seqprin(Seqlist *pSeq)//读写{int i;for(i=0;i<pSeq->size;i++)printf("%d ",pSeq->arr[i]);}void SeqInit(Seqlist* pSeq)//初始化{pSeq->size=0;pSeq->capicity=Max;pSeq->arr=(Datatype *)malloc(pSeq->capicity*sizeof(Datatype));if(NULL==pSeq->arr){printf("创建空间失败");}}void SeqDestory(Seqlist *pSeq)//销毁所创建的空间{assert(pSeq);//断言判断是否为空pSeq->size=0;pSeq->capicity=0;free(pSeq->arr);}Seqlist* SeqCheckFull(Seqlist *pSeq)//进行扩容{Datatype *tem=(Datatype *)realloc(pSeq->arr,sizeof(Datatype)*pSeq->capicity*2);//进行扩容pSeq->capicity*=2;pSeq->arr=tem;return pSeq;}void SeqPushBack(Seqlist* pSeq,Datatype x)//尾插{assert(pSeq);if(pSeq->size==pSeq->capicity){SeqCheckFull(pSeq);}pSeq->arr[pSeq->size++]=x;}void SeqPopback(Seqlist*pSeq)//尾删{assert(pSeq);if(pSeq->size==0){printf("顺序表里没有数据");return;}pSeq->size--;}void SeqPushFront(Seqlist* pSeq,Datatype x)//头插{int i=pSeq->size;assert(pSeq);for(;i>0;i--)pSeq->arr[i]=pSeq->arr[i-1];pSeq->arr[i]=x;pSeq->size++;}void SeqPopFront(Seqlist* pSeq)//头删{int i=0;assert(pSeq);if(pSeq->size==0){printf("顺序表里没有数据");return;}for(;i<pSeq->size;i++)pSeq->arr[i-1]=pSeq->arr[i];pSeq->size--;}void SeqInsert(Seqlist *pSeq,size_t pos,Datatype x)//在pos位置插入数据{int end;assert(pSeq);assert(pos<=pSeq->size);end=pSeq->size-1;while(end>=pos){pSeq->arr[end+1]=pSeq->arr[end];--end;}pSeq->arr[pos]=x;pSeq->size++;}void SeqErase(Seqlist *pSeq,size_t pos)//把pos位置的数据删除{assert(pSeq);assert(pos<=pSeq->size);while(pos<pSeq->size){pSeq->arr[pos]=pSeq->arr[pos+1];pos++;}pSeq->size--;}int SeqFind(Seqlist *pSeq,Datatype x)//查找一个数,若找到并返回它{int i=0;assert(pSeq);for(;i<pSeq->size;i++){if(pSeq->arr[i]==x)return i+1;}return -1;}void SeqAt(Seqlist *pSeq,size_t pos,Datatype x)//替换指定位置的值{assert(pSeq);assert(pos<=pSeq->size);pSeq->arr[pos-1]=x;}void Swap(Datatype *x,Datatype *y)//交换函数{Datatype tem=*x;*x=*y;*y=tem;}void BubbleSort(Seqlist *pSeq)//用冒泡排序法排列{int i,j,flage;assert(pSeq);for(i=0;i<pSeq->size-1;i++){flage=0;for(j=0;j<pSeq->size-i-1;j++){if(pSeq->arr[j]>pSeq->arr[j+1]){Swap(&(pSeq->arr[j]),&(pSeq->arr[j+1]));flage=1;}}if(flage==0)break;}}

以上为所有代码,每日学一点,日积月累。


阅读全文
0 0
原创粉丝点击