栈与队列

原创 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。允许插入的一端称为对尾,允许删除的一端称为对头。

循环队列

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

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

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

3335 数据结构实验之栈八:栈的基本操作

数据结构实验之栈八:栈的基本操作#include #include #include #include using namespace std; typedef int ET; typedef str...
  • yue_luo_
  • yue_luo_
  • 2016年10月27日 16:35
  • 99

C语言数据结构之栈与队列的应用(1)进制转换

栈与队列的应用 (1)输入一个十进制数,利用栈操作,将该数转换成n进制数。 #include #include #include #define stack_init_size 100 #d...
  • qq_26816591
  • qq_26816591
  • 2015年11月02日 12:50
  • 869

数据结构实验之栈与队列九:行编辑器

Problem Description  一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。    由于用户在终端上进行输入时,不能保证不出差错,因此,若在编...
  • shadowam
  • shadowam
  • 2017年09月27日 14:57
  • 137

数据结构实验之栈与队列五:下一较大值(一)

Problem Description 对于包含n(1
  • gx17864373822
  • gx17864373822
  • 2017年10月09日 22:41
  • 170

3335-数据结构实验之栈与队列八:栈的基本操作

#include using namespace std; typedef int ElemType;int m;class Stack{ private: ElemType *up; ...
  • ywj_justdoit
  • ywj_justdoit
  • 2017年10月19日 19:49
  • 66

【单调栈】数据结构实验之栈与队列六:下一较大值(二)

Think: 1知识点:单调栈 2题意:输入一个序列(1
  • BlessingXRY
  • BlessingXRY
  • 2017年10月04日 12:04
  • 246

【栈与队列】SDUT练习2—数据结构实验之栈一:进制转换

题目:点击打开链接 注意: 1、进制转换最有效的方法依然是短除法 2、empty()由于设计问题,在最后的某些边界情况出现BUG,比如内存错误,所以不要太信赖empty()(这个题可能没问题,其...
  • mig_davidli
  • mig_davidli
  • 2013年01月23日 10:59
  • 1537

表达式求值-栈和队列的应用

#include #include #define OK 1 #define ERROR 0 #define STACK_SIZE 20 #define STACK_INCREMENT 10 #de...
  • robin_Xu_shuai
  • robin_Xu_shuai
  • 2016年03月11日 22:57
  • 815

SDUT 3333 数据结构实验之栈六:下一较大值(二)

点击打开题目链接 #include using namespace std; struct node { int data;//当前数值 int Id;//标记当前数值Id所在,若...
  • zhidetian
  • zhidetian
  • 2016年07月20日 11:08
  • 562

sdut 2134 数据结构实验之栈与队列四:括号匹配

数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem...
  • sxy201658506207
  • sxy201658506207
  • 2017年10月10日 18:40
  • 124
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈与队列
举报原因:
原因补充:

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