空顺序表的实现(基于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的位置插入和删 ...
随机推荐
- LeetCode随缘刷题之转化成小写字母
这道题应该是最简单的一道题了把,简直在侮辱我. package leetcode.day_12_12; /** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同 ...
- 虫师Selenium2+Python_11、自动化测试项目实战
P276 11.1.3 自动化测试用例编写原则 在编写自动化测试用例过程中应该遵循以下原则: 1.一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器: 2.一个用例只能验证一个功能点,不要 ...
- C#颠倒字符串
本函数实现了反转字符串的功能,例如字符串"张赐荣",反转后得到"荣赐张". public static string ReverseText(this stri ...
- suse 12 脚本部署docker(二进制文件)
suse-linux:~ # cat /etc/issue Welcome to SUSE Linux Enterprise Server 12 SP3 (x86_64) - Kernel \r (\ ...
- Linux CPU信息说明
命令 [root@*** ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian ...
- CentOS7安装及配置 Zabbix全步骤,超详细教程
服务器太多,还在不同的平台和账户,监控不便 整个 Zabbix 监控,开始吧 一.关闭防火墙并开机不启动 sudo setenforce 0 sudo sed -i "s/SELINUX=e ...
- GAN实战笔记——第五章训练与普遍挑战:为成功而GAN
训练与普遍挑战:为成功而GAN 一.评估 回顾一下第1章中伪造达・芬奇画作的类比.假设一个伪造者(生成器)正在试图模仿达・芬奇,想使这幅伪造的画被展览接收.伪造者要与艺术评论家(判别器)竞争,后者试图 ...
- 【C# IO 操作 】开篇 IO命名空间的解析
图片模板下载 System.IO命名空间类分为:文件.驱动 .目录.路径.流.比特率流的操作 驱动类:比较简单,所以就不区分静态和实例操作类,所有的操作合并在DriverInfo类中 路径类:比较简单 ...
- C# 属性(一)
C# 中的属性是特殊的方法,该方法只负责对私有字段经行的操作,.我们用反编译查看时候看到真实属性是带()的方法,里面还包含get()和set()方法. 属性完成对私有字段的封装.对类的外部用户来说,属 ...
- python语法:注释
Python语法:注释 python语言中的注释是来帮助程序员理解并读懂代码内容的文字.当然,注释不仅在python语言中是这个作用,在其他语言中也几乎一样. python注释的生成方式 所有演示 ...