抽象数据类型

    抽象数据类型(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. CentOS 7.0 安装 python3.X 脚本

    #!/bin/sh #第一个Linux下的脚本,太多不明白的地方,只是依着网上的例子照葫芦画瓢,能正常运行即可 #运行环境 CentOS 7.0 版本 #首行指定程序的路径,以#号开头的行是注释行 # ...

  2. 看雪 安卓 dex文件

    http://bbs.pediy.com/showthread.php?t=177114

  3. Clean Code – Chapter 2: Meaningful Names

    Use Intention-Revealing Names The name should tell you why it exists, what it does, and how it is us ...

  4. 2015北京网络赛A题The Cats' Feeding Spots

    题意:给你一百个点,找个以这些点为中心的最小的圆,使得这个圆恰好包含了n个点,而且这个圆的边界上并没有点 解题思路:暴力枚举每个点,求出每个点到其他点的距离,取第n大的点,判断一下. #include ...

  5. MATLAB绘图与图形处理

    参考:http://www.cnblogs.com/djcsch2001/tag/MATLAB/  matlab部分写的不错! 7.2  三维图形 7.2.1  三维曲线.面填色命令 命令1  com ...

  6. MySQL 字段类型详解

    一.非数字类型 类型 范围 说明   Char(N) [ binary] N=1~255 个字元 binary :分辨大小写 固定长度 std_name cahr(32) not null VarCh ...

  7. 怎么创建MongoDB数据库

    MongoDB didn’t provides any command to create “database“. Actually, you don’t need to create it manu ...

  8. Android问题-DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)"

    问题现象:DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)" 问题提示:Checking project dependencies... ...

  9. 1N系列稳压二极管参数

    1N系列稳压二极管参数 型号 稳定电压 型号 稳定电压 型号 稳定电压 1N5236 7.5 1N5738 12 1N6002 12 1N5237 8.2 1N5739 13 1N6003 13 1N ...

  10. hdu2545 树上战争 (并查集)

    Problem Description 给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜 ...