通常,线性表可以采取顺序存储和链式存储两种,今天我们来讨论下顺序存储结构以及其对应的实现算法。

采用顺序存储是表示线性表的最简单的方法,具体做法是:将线性表中的元素一个接一个地存储在一片相邻的存储区域中。这种顺序表示的线性表也称为顺序表。顺序表,它是用元素在计算机中存储的物理位置的相邻关系来表示其元素的逻辑关上的相邻关系。只要确定了首地址,线性表中的任意元素的位置都可以方便的计算出来,达到可以随机存储的效果。

目录

1、创建顺序表

二、遍历顺序表

三、顺序表的插入

四、顺序表的删除

五、连续删除多个顺序表元素


1、创建顺序表

我们可以通过以下方式定义一个顺序表

#define MAXNUM 100; //顺序表中可以存储元素的最大个数
int n;              //顺序表中当前元素的个数
DataType *element;  //element[0],element[1],...,element[n-1]来存放顺序表中DataType类型数据                    

但是这种定义它存在一个不足:n和element完全处于独立的地位,没有反映出它们的内在联系。所以程序中完全可以把它们当成独立的自由变量来使用。为了解决这一缺陷,我们可以引进SeqList结构,来将二者产生联系,它的定义为:

 struct SeqList{int MAXNUM;int n;DataType* element;}; 

在实际应用中,为了访问和操作结构体中的元素方便,可以定义一个SeqList类型的指针类型来便于操作。

那好,到这里,要生成一个顺序表其算法要如何实现呢?这里通过代码演示一下如何生成一个简易的顺序表。

struct SeqList{int MAXNUM;int n;int *element;
};
typedef struct SeqList *PSeqList;
PSeqList create_SeqList(int max,int num)/*创建一个最大容量为max,实际容量为num,用于存放int        类型数据的顺序表 */
{PSeqList palist=(PSeqList)malloc(sizeof(struct SeqList)) ;if(palist==NULL)    //存储分配失败{printf("ERROR!");return NULL; }else{palist->element=(int*)malloc(sizeof(int*)*max);  //分配存放num个int类型元素的空间if(palist->element==NULL) {printf("Error!");return NULL; }else{                //这一部分主要是用来进行存放数据,可以根据实际需要进行存放int a=0,N=0;palist->MAXNUM=max;while(a<num){palist->element[a]=a;palist->n=N;N++;a++;}return palist;}
}
}

二、遍历顺序表

void Print_SeqList(PSeqList palist)//使用成功                                遍历顺序表
{int count=0;if(palist->n==0) printf("空表。。。"); //进行判断该顺序表是否为空表printf("该表长:%d,实际存储数据长度:%d\n",palist->MAXNUM,palist->n);for(;count<palist->n;count++){printf("序号%d数据是:%d\n",count,palist->element[count]);}printf("输出完毕!\n"); } 

结合一、二我们来测试一下代码运行结果。

一切正常!

三、顺序表的插入

顺序表的插入具体操作实现其实很好理解,假定你要在下标为p的元素前插入一个新元素,我们首先要判断该顺序表是否已经装满了元素,即判断palist->n<palist->MAXNUM是否成立,成立及说明顺序表没有满,则可以进行插入操作,否则报异常。然后我们只需将p及其后面的元素,依次往后移动一个位置,然后将新元素插入到原先的p元素的位置,最后更新顺序表实际长度即可。

具体实现代码如下:

int Test_insertPost_seq(PSeqList palist,int p,int x) //测试成功
{if(palist->n>palist->MAXNUM) return -1;       //判满 if(p<0 || p>palist->n-1) return -1 ;      //判合理int i;for(i=palist->n-1;i>=p;i--){palist->element[i+1]=palist->element[i]; //移位 } palist->element[p]=x;        //插数据palist->n=palist->n+1; return 1;       //延长顺序表
}

四、顺序表的删除

顺序表的删除其实跟顺序表的插入大致相同,顺序表的插入其要求后边的元素整体后移,而顺序表的删除则是要求后面的元素整体往前移动一个位置,最后更新表节点长度即可。

int Test_deleteV_seq(PSeqList palist,int x)//测试成功
{if(palist->n==0) return -1;       //判空int i,j;for(i=0;i<palist->n-1;i++)     //寻找数据x的下标 {if(palist->element[i]==x) break;}for(j=i;j<palist->n-1;j++){palist->element[j]=palist->element[j+1];  //移位 }palist->n=palist->n-1;         //更新顺序表长return 1; }  

五、连续删除多个顺序表元素

其实这个跟删除一个元素的方法大差不差,说白了就是迭代调用删除一个元素的方法即可。

int dele_seq_by_index(PSeqList palist ,int i)        //删除顺序表中下标为i的元素             {int j;for(j=i;j<palist->n-1;j++){palist->element[j]=palist->element[j+1];}palist->n=palist->n-1;return 1;}
int Test_num_dele_seq(PSeqList palist ,int i)         //从i号元素开始,删除完后边元素 {if(palist->n==0) return -1;            //判空else if(i<0 || i>palist->n-1) return -1;   //判合理while(palist->n>i) dele_seq_by_index(palist,i); }

好了,这以上就是关于顺序表的一些简单的创建和使用了。

数据结构C语言顺序表入门简单题目你会了吗?相关推荐

  1. 数据结构(C语言)顺序表的定义及基本操作

    顺序表的定义及基本操作 一.数据结构:顺序表的定义,创建,基本运算,实现 二.全部代码 定义顺序表 #include<stdio.h> #include<malloc.h> # ...

  2. 数据结构C语言——广义表

    很久没有发博客记录了,不过应该也没人关心这个,哈哈哈. 突然想起来,学习也不能只是干学,稍微做点记录. 之前我对html.css.js基础有了一定的理解,也学了一些模板,不过现在我想先把计算机基础给补 ...

  3. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  4. 数据结构之——《顺序表》

    数据结构之--<顺序表> 1.含义 2.分类 3.接口函数实现 4.顺序表的优缺点 1.含义 顺序表示用一段纹理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组 ...

  5. 【数据结构】【顺序表】 SqList *L与SqList*L的区别

    [数据结构][顺序表] SqList *&L与SqList*L的区别 显然,对于顺序表的抽象数据模型中的函数,其参数使用各不相同. SqList *&L的情况 它的意思是,L是对Lis ...

  6. 数据结构之静态顺序表(含游戏菜单)

    目录 一.什么是顺序表? 二.静态顺序表和动态顺序表的不同点 三.什么是静态顺序表 四:函数接口实现 1.初始化结构体 2.打印数据 3.头插数据 4.尾插数据 5.头删数据 6.尾删数据 附:原码链 ...

  7. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  8. c语言顺序表所需的头文件,数据结构【顺序表】

    1.线性表定义 线性表是一种线性结构.线性结构的特点是数据元素之间是一种线性关系,数据元素"一个接一个的排列".在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据 ...

  9. python与js通用的数据结构_五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)...

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...

最新文章

  1. linux上安装pycharm
  2. MySQL 数据库sql语句用关键字作为where条件进行筛选实例演示,mysql建表、查询字段为关键字解决方法
  3. flask基础之LocalProxy代理对象(八)
  4. 关于layui下select下拉框不显示问题解决办法
  5. 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件
  6. CSP202012-2 期末预测之最佳阈值(100分)【序列处理】
  7. 语言中根号打法_知识的诅咒,数学老师在教学中不得不防的陷阱
  8. 39页第五题计算数列之和
  9. BZOJ2005 [NOI2010]能量采集
  10. CMU 15-213 Introduction to Computer Systems学习笔记(21) Synchronization: Basic
  11. hp laserjet 1213 linux驱动下载,惠普HP LaserJet Pro M1213nf一体机驱动
  12. 第六章、Hash函数
  13. Framebuffer子系统【转】
  14. 万物互联大时代,物联网的基础技术有哪些?
  15. 快速制作响应式的个人主页案列
  16. java学习 day01_basic
  17. 曾经人见人爱花见花开的zookeeper为啥突然不香了呢
  18. 金融时报:去赚8亿非网民的钱
  19. #python元组(元组的创建和删除)
  20. Generation

热门文章

  1. js截取某个字符串前面的内容
  2. linux 起网口up_【Linux】ubuntu或linux网卡配置/etc/network/interfaces
  3. CommonJs 和 ESModule 的 区别整理
  4. 面试题:Commonjs 和 Es Module区别
  5. 【算法】常见数据结构基本算法整理
  6. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
  7. Python中os.listdir的排序问题
  8. qrc文件的使用方法
  9. 航天类免费共享资料(电子书籍)
  10. Linux 目录文件与管理