抽象数据类型

    抽象数据类型(ADT)是一系列操作的集合。诸如表、集合、图和他们的操作一起可以看做是抽象数据类型

表 List

表的实现有两种:数组和链表。数组实现的表在插入和删除操作上的花费十分惊人,最坏的情况为O(N),而且数组的大小必须事先指定,意味着表的大小有一个固定的上限,如果这个值很大的话会浪费很大的空间,很小的话又不能满足使用要求,因此表的实现一般采用链表的方式。

 

链表的节点是一个结构体,结构体内有数据域和下一节点的指针。

struct Node
{
ElementType Element; //数据域
Position Next; //下一节点指针
}

一般情况下,我们会设置一个表头(Header),表头是个哑节点,只包含了链表第一个元素的地址。这样做的目的是解决在表的第一个元素之前插入元素或者删除表的第一个元素造成的表丢失的风险。给出几个表的基本操作代码。

int isEmpty(List L)
{
return L->Next == NULL; //空列表表头的下一个元素不存在,因此测试为真将返回1.
} int isLast(Position P, List L)
{
return P->Next == NULL; //最后一个元素的下个元素不存在,因此测试为真返回1.
} Position find(ElementType x, List L)
{
Position p = L->Next; while(p != NULL && p->Element != x)
p = p->Next; return p; //若没有找到,此时的p便为NULL。
} Position findPrevious(ElementType x, List L)
{
Position p = L; //要找x元素的前一个节点,需要从表头开始。 while(p->Next != NULL && p->Next->Element != x)
p = p->Next; return p; //若x不存在L中,将返回最后一个元素的位置,最后一个元素不可能是某个节点的前驱。 } void delete(ElementType x, List L)
{
Position p, temp; p = findPrevious(x,L); //删除节点是需要用到前驱的指针
while(p->Next != NULL) //测试p是不是最后一个节点。可以写一个函数isLast()来进行测试。
{
temp = p->Next;
p->Next = temp->Next;
free(temp);
} //在位置p处插入节点,可以在p前也可在p后,此处采用在p后。
void insert(ElementType x, Position p, List L)
{
Position temp; temp = malloc(sizeof(Node)); //malloc返回void*类型,未定义类型指针可以指向任何类型。 if(temp == NULL)
printerror("No More Space!"); temp->Element = x;
temp->Next = p->Next;
p->Next = temp; }

另外,链表还有双链表以及循环链表,它们的原理与单链表大同小异,这里不多加叙述了。

算法举例(1)——基数排序

未完待续

 

栈 Stack

栈是限制插入和删除只能在一个位置上进行的表,即只能在栈顶进行操作。基本操作是Push(入栈)和Pop(出栈),可能还有Top(返回栈顶元素)。栈也叫LILO(先进先出)表。一般来说,栈只有栈顶元素是可见的。

数据结构与算法分析(2)——表、栈和队列的更多相关文章

  1. python数据结构与算法第六天【栈与队列】

    1.栈和队列的原理 栈:后进先出(LIFO),可以使用顺序表和链表实现 队列:先进先出(FIFO),可以使用顺序表和链表实现 2.栈的实现(使用顺序表实现) #!/usr/bin/env python ...

  2. 【数据结构与算法】001—栈与队列(Python)

    栈与队列 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有先进先出 ...

  3. 纯数据结构Java实现(2/11)(栈与队列)

    栈和队列的应用非常多,但是起实现嘛,其实很少人关心. 但问题是,虽然苹果一直宣传什么最小年龄的编程者,它试图把编程大众化,弱智化,但真正的复杂问题,需要抽丝剥茧的时候,还是要 PRO 人士出场,所以知 ...

  4. C语言数据结构——第三章 栈和队列

    三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

  5. C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...

  6. 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第3章  栈和队列 - 汉诺塔(Hanoi Tower)问题 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版> ...

  7. LeetCode通关:栈和队列六连,匹配问题有绝招

    刷题路线参考: https://github.com/chefyuan/algorithm-base https://github.com/youngyangyang04/leetcode-maste ...

  8. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  9. 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

    表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...

随机推荐

  1. linux 查看用户所在组(groups指令的使用) 含实例

    经常将某个文件夹的权限赋给某个用户的时候,也需要配置该用户所在的组,因此,我们需要查看该用户有哪些组,我们可以使用如上命令查看用户所在组 [oracle@gl ~]$ vi /etc/group ro ...

  2. Doing Homework(HDU 1074状压dp)

    题意:给你n个要做的作业,它们的名字.期限.可完成所需天数(必须连续)在规定期限不能完成要扣分(每天一分)求做作业顺序使扣分最少. 分析:作业数量较少,用状态压缩,做到第i种作业花费的天数dp[i]. ...

  3. bzoj 1038 [ZJOI2008]瞭望塔(半平面交)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] 找一个最低塔高使可以看到村庄的每一个角落. [思路] 半平面交 能够看 ...

  4. ffmpeg常见命令

    一.安装       下载ffmpeg,解压之后配置环境变量即为安装 打开dos界面,进入目标文件夹例如:E:/ cd E:\BaiduYunDownload\ffmpeg\ffmpeg_simple ...

  5. PetShop学习第四天

    ASP.NET缓存 1.页输出缓存分为整页缓存和部分页缓存.我们可以通过@OutputCache指令来完成对Web页面的输出缓存.

  6. AIM Tech Round 3 (Div. 2) (B C D E) (codeforces 709B 709C 709D 709E)

    rating又掉下去了.好不容易蓝了.... A..没读懂题,wa了好几次,明天问队友补上... B. Checkpoints 题意:一条直线上n个点x1,x2...xn,现在在位置a,求要经过任意n ...

  7. 获取最外层View

    获取最外层View activity.getWindow().getDecorView()

  8. [iOS基础控件 - 3.1] QQ登陆界面

      A.storyboard 控件版 1.label 2.textfield      a.Keyboard Type           账号:Number Pad           密码:Num ...

  9. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  10. Open War I: 怪物繁殖,行走仿真,瞄准射击...

    See below demo: Share the source codes with your guys. >>>download this "hacking meat& ...