栈与队列

原创 2016年08月28日 20:54:33

栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表

我们把允许插入和删除的一端称为栈顶(TOP),另一端称为栈底(Bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构

栈的插入操作,叫做近栈,也称为压栈、入栈
栈的删除操作,叫做出栈,也有的叫做弹栈

栈的定义

typedef struct StackNode
{
    int data;
    struct StackNode *next;

}StackNode,*LinkStackPtr;

typedef struct LinkStack
{
    LinkStackPtr top;
    int count;
}LinkStack;

入栈

/**
 进栈操作
 */
void Push(LinkStack *S, int data)
{
    LinkStackPtr sptr = (LinkStackPtr)malloc(sizeof(StackNode));
    sptr->data = data;
    sptr->next = S->top;
    S->top = sptr;
    S->count++;
}

出栈操作

/**
 出栈操作
 */
BOOL Pop(LinkStack *S, int *data)
{
    LinkStackPtr p ;
    if (!S->count)
        return 0;
    *data = S->top->data;
    p = S->top;
    S->top = S->top->next;
    free(p);
    S->count--;
    return 1;
}

栈的进栈和出栈操作都很简单,没有任何循环操作,时间复杂度为O(1)

队列

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为对尾,允许删除的一端称为对头。

循环队列

队列的头尾相接的顺序存储结构称为循环队列

队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

栈与队列。

  • 2017年10月11日 11:03
  • 1.89MB
  • 下载

栈和队列的应用

  • 2015年05月28日 17:07
  • 44KB
  • 下载

队列和栈的基本性质和应用

栈和队列在实现结构上可以有数组和链表两种形式: 数组实现比较容易; 用链表结构比较复杂,因为有指针。 栈结构的基本操作: pop  从栈顶弹出一个元素; top或peek 只访问栈顶元素,但是...

栈和队列_数据结构

  • 2015年04月05日 13:37
  • 4.11MB
  • 下载

自定义的栈与队列

  • 2016年01月04日 21:38
  • 3KB
  • 下载

数据结构 栈和队列 算法设计题

五 算法设计题 1. 设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[O..maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1,S2有关...

数据结构栈和队列

  • 2015年03月05日 21:48
  • 337KB
  • 下载

学习javascript数据结构(一)——栈和队列

前言只要你不计较得失,人生还有什么不能想法子克服的。原文地址:学习javascript数据结构(一)——栈和队列博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因为...

栈与队列的基本操作

  • 2015年11月11日 10:39
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈与队列
举报原因:
原因补充:

(最多只允许输入30个字)