顺序表的实现(头插,头删尾插,尾删)
来源:互联网 发布:电视上安装网络机顶盒 编辑:程序博客网 时间: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
- 顺序表的实现(头插,头删尾插,尾删)
- 【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)
- 双向循环链表的头插、中插、尾插、删除、逆序顺序显示(C++实现)
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- 数据结构中静态顺序表的初始化、尾插、尾删、头插、头删、任意位置的插入及删除
- 数组的链表实现:创建(头插/尾插)、打印、删除、插入
- 实现链表逆序(头插)
- 实现链表逆序(头插)
- C++类中单链表的实现(头插、尾插、头删、尾删、指定位置插入、指定位置删除、链表长度、清空链表、链表排序)
- C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
- c语言:【顺序表】静态顺序表的头插、头删
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- C++语言实现单链表的尾插,尾删,头插,头删等
- 链表的插入(头插,尾插,中间插)
- C语言实现链表的头插,尾插,插入,修改,删除和遍历
- 顺序表插入数据方式之头插
- 顺序表-Class方式的实现(头文件)
- 顺序表的头文件和头文件的实现
- 博客第一天
- JavaScript浏览器端文本转语音
- jQuery实现瀑布流
- js屏蔽鼠标右键默认事件以实现自定义菜单
- RocketMQ 客户端最佳实践
- 顺序表的实现(头插,头删尾插,尾删)
- css知识点积累
- krpano——去除google地图里的水印
- Android组件化初探二(Application与Library切换)
- Placeholder中的内容如何换行
- [最小割]SRM 590 div 1 1000pts FoxAndCity
- Oracle 12c中ORACLE_SVCUSER的含义
- NOIP 提高组 2010 机器翻译
- 网易内部推荐