数据结构复习-线性表知新

本来想写在纸上的,不过估计不怎看,还是写在云上,哪天无聊时看看,
**温故而知新,可以为师矣。**这些都是之前没有太过在意的地方,细细推敲之后能发现许多有趣的东西

1.随机访问,顺序访问

在这里插入图片描述

2.malloc 和 new

 void * p1;
 int *p2;
 p1 = p2;   //p1变成了一个int型的指针了,void型指针可以自动转化为其他类型的指针,前提都是指针

详细的malloc放到之后的文章说,

3.数据元素和数据项和数据结构 数据类型

这里写的少一些,以后慢慢增加,例如某个顺序表的,数据项组成数据元素,

#define ElemType int;

常在开始定义ElemType类型,或者自定义类型,为了以后的操作方便
在这里插入图片描述
而抽象数据结构是什么呢?资料上说是:抽象数据组织与之相关的操作 ,他可以定义一个完整的数据结构

下面是我们数据结构课上的队列的ADT(abstract datatype)课件,
抽象数据组织,这里是用数学语言定义的,看起来很抽象
还有基本操作
在这里插入图片描述
在这里插入图片描述

4.有关算法的健壮性

由于编程语言选用的不同,try catch 结构可能不同,
不过,对于算法仍然保存最基础的纠错功能,即通过简单的判断,对一些非法数据做出判断
例子1,出栈,栈空,则结束

int Stack_Push(SqStack &S,char e)
{
  if (S.top-S.base==S.stacksize)//连续内存地址,
     return ERROR;/* code */
   *S.top=e;S.top++;//优先级,*S.top=e;之后S.top++;
   return OK;
}

例子2,向顺序表插入一个元素,

1.表空时
2.插入的位置非法时
3.表已满时
为以上三种情况时,都不能插入,你必须对以上的基本情况进行考虑,进而完成最基础的纠错,算法要有健壮性,对输入的数据检查后分流处理

bool ListInsert_Sqlist(Sqlist &L,int i,ElemType e)
{
   if (i<1 || i>L.length+)
   return false;
   if ((L.length>=Maxsize))
   {
      return false;
   }
   //code
   
}

5.顺序表&的紧凑形式

我们说的顺序表链表一般不是空的,当它空的时候就要删除它,同时改变length的长度,所以,不要留空,
在这里插入图片描述

6.C/C++如何返回多个值?

这里,C\C++不能返回多个值,只能 return a value or function ,那怎么可以返回多个值呢?最常规的办法,就是用指针和引用操作,简单的说,通过对地址的操作
python函数可以返回不定长的数据

7.链表的头结点有啥用?能不能不要?

作用:
①头结点的数据域可以不存储任何信息,也可以存取length信息

防止单链表是空的而设的.当链表为空的时候,带头结点的头指针就指向头结点.如果当链表为空的时候,单链表没有带头结点,那么它的头指针就为NULL.

保证算法设计的统一性,减少分支,减少对特殊情况的考虑。为了方便单链表的特殊操作,插入在表头或者删除第一个结点.这样就保持了单链表操作的统一性! 单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了,方便了单链表的操作,也减少了程序的复杂性和出现bug的机会。

操作方便。链表有头指针,当我们需要使用链表中的数据时,我们可以使用遍历查找等方法,从头指针指向的结点开始,依次搜索,直到找到需要的数据;反之,若没有头指针,则链表中的数据根本无法使用,也就失去了存储数据的意义。

当然头结点会占用额外开销,但与他的好处相比,并没有什么。
不带头结点的链表:

8.链表

在这里插入图片描述

需要注意以下几点:

1. 双链表的尾结点的next值为null头结点的prior也是null

2. 循环链表的rear(next)指向头结点,即是L

9.静态链表

静态链表,用一个顺序表来表示链表,后面还会遇到顺序存储的二叉树,暂时想不到有什么用?
缺点:
1.顺序结构占用大量连续空间,比一般的顺序表占用空间还多
2.会出现部分空间浪费的形式,不是紧凑形式

在这里插入图片描述

看起来很像哈夫曼树创建的过程,
优点是:
并非所有的语言都支持指针,因此这也能提供一个不错的思路

10. 链表中的 Lnode *p和p到底是啥意思?

我们知道,指针是这样定义的

<数据类型>      *<变量名>

这里的数据类型即可以是系统内部类型,也可以是自定义数据类型
比如我们常自定义的LNode,意思是指向该<数据类型>的指针,72
*p:内容
p:地址

11,今天开始学习linux
~2021.5.3 软件工程专业,岂能不会Linux,~~~

名称说明
unixunix商业化的,unix系统大多是与硬件配套的,另外,windows和linux·都参考了unix
。multi uni
Linuxlinux免费的,开源的,可运行在多种硬件上
GNU(读音与new相似)gnu计划,为linux提供软件资源
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值