数据结构之动态顺序表(C实现)
线性表有2种,分为顺序表和链表。
顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定)
链表: 有3种,单链表、双向链表、循环链表(长度不固定) seqList.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include <stdio.h>
#include <malloc.h>
typedef enum
{
OK=, //正确
ERROR=, //出错
TRUE=, //为真
FALSE= //为假
}status;
typedef int ElemType; //宏定义队列的数据类型
#define initSize 20 //线性表存储空间的初始大小
//顺序表的结构
typedef struct
{
//静态顺序表:使用动态分配的指针方式
ElemType *data; //顺序表的数据元素指针,指向存放数据元素存储空间的基地址
int length; //顺序表的长度
int maxSize; //顺序表的最大容量
}seqList;
//创建顺序表 pSeqList-顺序表对象指针 elemSize-线性表的初始存储容量
status initList(seqList *pSeqList,int elemSize);
//销毁顺序表
void destroyList(seqList *pSeqList);
//清空顺序表: 将长度清零即可
status clearList(seqList *pSeqList);
//判断顺序表是否为空
status isEmpityList(seqList *pSeqList);
//在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入
//将原先的第i个元素以及后面所有元素都后移一个位置
status enList(seqList *pSeqList, int i, ElemType element);
//删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移
status deList(seqList *pSeqList,int i,ElemType *element);
//遍历队列
void listTraverse(seqList *pSeqList);
#endif // SEQLIST_H
seqList.c
#include "seqlist.h"
/*********************************************
* 线性表有2种,分为顺序表和链表。
* 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定)
* 链表: 有3种,单链表、双向链表、循环链表(长度不固定)
*********************************************/
//创建顺序表 pSeqList-顺序表对象指针 elemSize-线性表的初始存储容量
status initList(seqList *pSeqList,int elemSize)
{
//给顺序表的
pSeqList->data = (ElemType *)malloc(sizeof(ElemType)*elemSize);
if(!pSeqList->data)
{
printf("pSeqList->data malloc error!\n");
return ERROR;
}
pSeqList->length = ; //最开始,顺序表的元素个数为0,即长度为0
pSeqList->maxSize = elemSize;
return OK;
}
//销毁顺序表
void destroyList(seqList *pSeqList)
{
free(pSeqList->data);
pSeqList->data = NULL;
}
//清空顺序表: 将长度清零即可
status clearList(seqList *pSeqList)
{
if(!pSeqList->data) //检验顺序表的数据元素指针是否为空
{
pSeqList->length = ; //将长度清零
}
return OK;
}
//判断顺序表是否为空
status isEmpityList(seqList *pSeqList)
{
)
return TRUE;
return FALSE;
}
//在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入
//将原先的第i个元素以及后面所有元素都后移一个位置 (i=0,即删除第一个元素)
status enList(seqList *pSeqList,int i,ElemType element)
{
int len = pSeqList->length; //获得线性表的长度
//i的范围限制为0-len+1(原先长度为len,现在为len+1)
|| i>len+)
{
printf("i is false!\n");
return ERROR;
}
//将原先的第i个元素以及后面所有元素都后移一个位置
;j>=i;j--)
{
pSeqList->data[j+] = pSeqList->data[j];
}
pSeqList->data[i] = element; //在i的位置上,下标为i-1,插入新元素element
pSeqList->length++; //线性表的长度+1
return OK;
}
//删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移
status deList(seqList *pSeqList,int i,ElemType *element)
{
int len = pSeqList->length; //获得线性表的长度
//i的范围限制为0-len+1(原先长度为len,现在为len+1)
|| i>len+)
{
printf("i is false!\n");
return ERROR;
}
*element = pSeqList->data[i];
//将被删元素之后的元素逐个前移
;j<len;j++)
{
pSeqList->data[j-] = pSeqList->data[j];
}
pSeqList->length--; //线性表的长度-1
return OK;
}
//遍历队列
void listTraverse(seqList *pSeqList)
{
//如果队列为空
if(isEmpityList(pSeqList)==TRUE)
{
printf("\nqueue is NULL!\n");
}
printf("listTraverse: ");
;i<pSeqList->length;i++)
{
printf("%d ", pSeqList->data[i]);
}
printf("\n");
}
main.c
/*********************************************
* C实现顺序表 2017/10/26 by nieXianFeng
*********************************************/
#include <stdio.h>
#include "seqlist.h"
int main()
{
int value; //用于保存删除的元素
seqList *pSeqList = (seqList*)malloc(sizeof(seqList));
if(!pSeqList) //检测是否申请失败
{
printf("pSeqList malloc error!\n");
;
}
//调用初始化队列的函数
initList(pSeqList,initSize);
//调用出队函数
enList(pSeqList,,);
enList(pSeqList,,);
enList(pSeqList,,);
//调用遍历队列的函数
listTraverse(pSeqList);
//调用出队函数
,&value)==OK)
{
printf("出队一次,元素为:%d\n", value);
}
//调用遍历队列的函数
listTraverse(pSeqList);
;
}
数据结构之动态顺序表(C实现)的更多相关文章
- 数据结构C语言版--动态顺序表的基本功能实现(二)
/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
一.基本概念: 线性表:由n个类型相同的数据元素组成的有限序列,记为(a1,a2,--an). 线性表的特征:其中的元素存在这序偶关系,元素之间存在着严格的次序关系. 顺序存储表:线性表中的元素依次存 ...
- 【数据结构】之顺序表(C语言描述)
顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...
- C++实现动态顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...
- C++数据结构学习之顺序表
顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...
- 动态顺序表(C++实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)
1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...
随机推荐
- Big String(poj 2887)
题意: 给你一个不超过1e6的字符串,和不超过2000次的操作 操作分为两种: 1.将一个字符插入到某个位置的前面 2.询问当前位置的字符 /* 块状链表模板水题(我的智商也就能做这种题了). 观察题 ...
- POJ 3255_Roadblocks
题意: 无向图,求单源次短路,每条边可以走多次. 分析: 对于每个点记录最短路和次短路,次短路可以是由最短路+边或者是次短路+边更新而来.在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令 ...
- [bzoj2738]矩阵乘法_整体二分_树状数组
矩阵乘法 bzoj-2738 题目大意:给定一个$n*n$的矩阵.每次给定一个矩阵求矩阵$k$小值. 注释:$1\le n\le 500$,$1\le q\le 6\cdot 10^4$. 想法: 新 ...
- 携程Apollo(阿波罗)配置中心把现有项目的配置文件迁移到Apollo
说明: 1.这个示例应该算是一个静态迁移,也就是说配置更新后要重启应用才能体现更新,目的是展示现有配置的如何迁移. 2.如果要实现更新配置后动态去更新而不重启应用的操作,比如ZK地址和数据库地址这些, ...
- 【.Net 学习系列】-- 反射的简单用法
新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...
- [转]chrome 的devtools 中setting 开启workspace , 也有点用处。不是很大
转载的,原文: http://wiki.jikexueyuan.com/project/chrome-devtools/saving-changes-with-workspaces.html ---- ...
- C#.NET 无法直接启动带有类库输出类型的项目怎么办
我把Driver.cs文件去掉了一行注释,发现报错 右击这个解决方案,选择属性,然后再启动项目中改成MySample
- AutoCAD如何倒角 倒圆角 倒直角
倒圆角:输f 再输r 再输入你想倒的半径,然后选相邻的两边倒直角:输chamfer 再输d 再输你想倒的距离,然后先相邻的两边 祝你成功
- 百度编辑器ueditor给上传的图片加入水印
百度编辑器本身是没有为上传图片加入水印的功能,想要在上传的时候加入图片水印,也非常easy.以 ueditor 1.2.6 为例.打开php文件夹以下的imageUp.php文件,查找"$i ...
- chosen.jquery.js 搜索框只能从头匹配的解决思路+方法
chosen.jquery.js 搜索框只能从头匹配的解决思路+方法 心急者请直接看下方 总结 ,由于本问题未能找到直接答案,所以只能通过修改源码解决.故将修改源码思路贴出来供大家参考,在遇到其他改源 ...