《算法导论》第十章——基本数据结构

第十章——基本数据结构

一.栈和队列

栈实现的是一种后进先出的策略,被删除的是最近插入的元素,可以把栈想象成一个盒子,插入的元素相当于是往里面放一个物品,删除元素相当于把最上面的物品拿出来。

队列实现的是一种先进先出的策略,被删除的总是在集合中存在时间最长的那个元素,可以把队列想象成人在排队,插入元素相当于是往队伍的最后面放上一个人,删除则是把第一个人去除掉。

栈的相关操作伪代码:

STACK-EMPTY(S)
if S.top == 0
	return TURE
else return FALSE

PUSH(S,x)
S.top += 1
S[S.top] = x

POP(S)
if STACK-EMPTY(S)
	error "underflow"
else S.top -= 1
	return S[S.top+1]

队列的相关操作伪代码:

ENQUEUE(Q,x)   //入队
Q[Q.tail] = x
if Q.tail == Q.length
	Q.tail = 1
else Q.tail += 1

DEQUEUE(Q)  //出队
x = Q[Q.head]
if Q.head = Q.length
	Q.head = 1
else Q.head += 1
return x

二.链表

链表的相关操作的伪代码:

LIST-SEARCH(L,k)   //链表的搜索
x = L.head
whild x != NIL and x.key != k
	x = x.next
return x

LIST-INSERT(L,x)  //链表的插入
x.next = L.head
if L.head != NIL
	L.head.prev = x
L.head = x
x.prev =NIL

LIST-DELETE(L,x)  //链表的删除
if x.prev != NIL
	x.prev.next = x.next
else L.head = x.next
if x.next != NIL
x.next.prev = x.prev

链表操作可以设置哨兵结点,使得链表的各种操作更为简单,简化边界条件的处理。

三.指针和对象的实现

当有些语言不支持指针和对象数据类型的时候,可以采用数组和数组下标来构造对象和指针。

对象的多数组表示
在这里插入图片描述
对象的单数组表示
在这里插入图片描述
对象的分配与释放
在这里插入图片描述

四.有根树的表示

二叉树
在这里插入图片描述
分支无限制的有根树

左孩子右兄弟表示法:
1.x.left-child指向x的最左边的孩子结点
2.x.right-sibling指向x右侧相邻的兄弟结点
如果结点x没有孩子结点,则x.left-child=NIL;如果结点x是其父结点的最右孩子,则x.right-sibling=NIL。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值