空顺序表的实现(基于c语言)
书中对于创建一个空线性表的定义如下:
struct SeqList{
int MAXNUM; // 顺序表中最大元素的个数(也就是最多多少个元素),(其实MAXNUM也可以定义在外面)
int n; // 存放线性表中元素的个数 (n<=MAXNUM)
DataType *element; //存放线性表的元素,element[0],element[1]...
//后续要给这个指针分配一个连续的区域
};
typedef struct SeqList * PSeqList;
//为使用方便,定义一个SeqList类型的指针类型
1 PSeqList createNullList_seq(int m){
2 PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
3 if (palist != NULL){
4 palist->element = (DataType*)malloc(sizeof(DataType)*m);
5 if ( palist -> element){
6 palist -> MAXNUM = m;
7 palist -> n = 0;
8 return palist;
9 }
10 else free(palist);
11 }
12 printf("OUT OF SPACE!!");
13 return NULL;
14 }
对上述函数的一个理解:返回值是一个指向SeqList结构的一个指针;
传入的数据是指打算存放数据元素的个数;
然后第一步操作是定义一个指向SeqList结构的指针,并为其分配了一块区域(存放一个SeqList结构大小),通过 -> 访问里面的数据;
然后判断了是否能找到这样大的区域,如果没有则返回NULL,因此以NULL作为判断条件,如果为NULL,就可以直接结束了;
然后为element指针分配区域,要用到传入的参数,返回一个可以装m个DataType类型大小的连续区域;
然后是以palist->element为判断条件,(这里可以这样理解,就是palist->element表示的是一个地址,但是如果内存不够等其他情况,返回NULL,也相当于是false,如果为NULL的话,就是第一次可以分配成功,第二次未成功,那不要忘记把第一次分配的给free),如果成功的话,就对MAXNUM赋值m,也就是最多有m个元素,初始化n的值为0(n表示线性表中已经存放的元素的个数);
结束之后,返回得到的这样一个指针。
看完第一个方法,还可以理解,主要是c指针,结构,数组相关的,后续会更新。
空顺序表的实现(基于c语言)的更多相关文章
- 顺序表的基本操作【c语言】【创建、插入、删除、输出】
作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...
- 顺序表及基本操作(C语言)
#include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...
- (续)顺序表之单循环链表(C语言实现)
单循环链表和单链表的唯一区别在于单循环链表的最后一个节点的指针域指向第一个节点, 使得整个链表形成一个环. C实现代码如下: #include<stdio.h> typedef struc ...
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- "《算法导论》之‘线性表’":基于动态分配的数组的顺序表
我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分 ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 线性表——顺序表的实现与讲解(C++描述)
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这 ...
- 线性表是否为空,定位元素下标(基于c语言)
/*前面已经说过结构体中的n是代表已经放入线性表中元素的个数,所以判断线性表是否为空就是判断n的值是否为空*/ //书中代码如下 int isNullList_seq(PSeqList palist) ...
- 前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)
0.对于顺序表中的n个元素,如果在下标i的位置之前插入一个元素,则需要将后面n-i个元素向后移动一位:如果是删除下标为i处的元素,则是则需要将后面n-i-1个元素向前移动一位.如果说在i的位置插入和删 ...
随机推荐
- 关于unix下cp命令复制权限不够的问题
例如要将mysql-5.7.17-macos10.12-x86_64.tar.gz 拷贝到/usr/local目录下时,执行cp mysql-5.7.17-macos10.12-x86_64.tar. ...
- android TextView属性详解
RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:l ...
- Leetcode随缘刷题之寻找两个正序数组的中位数
我一上来没读清题,想着这题这么简单,直接就上手写了: package leetcode.day_12_05; import java.util.ArrayList; import java.util. ...
- Git配置多个github账号免密登录
在公司开发中,有时候会存在公司账户跟私人账户共存,并随时需要切换的情况,这种情况下git可以配置多个ssh-key,无缝切换账号. 假如有两个github账号,一个是私人github账号,一个是公司g ...
- 总结下Mac环境下按照appium
第10天休息 先来总结下Mac环境下按照appium 一.相关网站 官网: http://appium.io/ 测试论坛 https://testerhome.com/wiki 二.环境准备 从官 ...
- PL/SQL批量执行SQL脚本文件
1.选择File > New > Command Windows(命令窗口) 2.输入 @ 符号,之后敲击回车键.从本地选择执行的 SQL脚本 等待批量命令全部执行成功,关闭页面即可 新增 ...
- like使用索引如何避免失效
1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS staff ( id INT PRIMARY KEY auto ...
- c++ 指针数组与指向数组的指针
指针数组与指向数组的指针 1.int (*a)[10]-->指向数组的指针 a是一个二级指针,可认为是一个二维数组的首地址,指向一个一维数组,数组存储了10个int数据. int arr1[10 ...
- HDFS成员的工作机制
NameNode工作机制 nn负责管理块的元数据信息,元数据信息为fsimage和edits预写日志,通过edits预写日志来更新fsimage中的元数据信息,每次namenode启动时,都会将磁盘中 ...
- windbg调试命令
重要 (1) windbg命令分为标准命令(40个左右),元命令(一百多个)和扩展命令. 标准命令提供最基本的调试功能,不区分大小写.如:bp g dt dv k等 元命令提供标准命令没有提供的功能, ...