数据结构——栈的操作

栈是先进后出的,队列是先进先出的。

栈顶在上面,栈是向上生长的,每次数据操作是压栈,最后的数据元素指向栈顶。

实例:用两个栈实现队列

题目:用两个栈实现一个队列,队列的声明如下,请实现他的连个函数,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

 1 template<typename T>class CQueue
 2 {
 3 public:
 4     CQueue(void);
 5     ~CQueue(void);
 6     void appendTail(const T& node);
 7     T deleteHead();
 8 private:
 9     stack<T>stack1 ;
10     stack<T>stack2;
11 };
12 template<typename T>
13 void CQueue<T>::appendTail(const T& node)
14 {
15     stack1.push(node);
16 }
17 template<typename T>
18 T CQueue<T>::deleteHead()
19 {
20     if (stack2.size()<=0)
21     {
22         while (stack1.size()>0)
23         {
24             T tmp = stack1.top();
25             stack2.push(tmp);
26             stack1.pop();
27         }
28     }
29     if (stack2.size()==0)
30     {
31         throw std::exception("Empty Queue.");
32     }
33     T head = stack2.top();
34     stack2.pop();
35     return head;
36 }

思路提示:将一个栈中的结点依次出栈,然后压入到另一个栈中,构成队列,如果向删除头部结点,则只需要将新栈中栈顶出栈即可。

时间: 2024-10-09 04:20:52

数据结构——栈的操作的相关文章

数据结构-栈有关操作算法

#include <stdio.h>#include <stdlib.h> #define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -2#define OK 1#define ERROR 0 typedef int SElemType; //栈结构体typedef struct {    SElemType *base;    SElemType *top;    int stacksize;}SqS

对栈的操作和算法实现

一.栈的定义 从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作都是线性操作的子集,它是操作受限的线性表. 栈(stack)是限定仅在表尾进行插入或删除操作的线性表. 栈一般分为两种: 静态栈:用数组实现: 动态栈:用链表实现. 一般用的比较多的都是动态栈.如果学会了链表,其实对栈的操作就比较简单了. 二.栈的结构 空栈的结构:(其实就是栈顶和栈顶都指向一个不存放有效数据的头结点) 存有结点的栈结构:(栈顶指针指向栈顶结点,栈底指针指向头结点) 三.用C语言实现 /* 2016年9月17日

栈的操作

学习了数据结构之的顺序表与链表之后,再去接触栈的操作,觉得简单多了.自己就想用栈来实现下实际功能.但是遇到了麻烦(对于初学者来说),不管结果怎样,这都是一次成长的过程,虽然现在问题没有解决,但是我先把他以微博的形式记录下来,以遍我在以后能解决它. #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include"string.h" typedef char NoteType; //#in

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的

大话数据结构----栈

栈的定义: 栈(stack)是限定尽在表尾进行插入和删除操作的线性表. 从定义中可以看出,栈也是线性表,是一个特殊的线性表,之前说线性的表的时候,线性表可以在任意位置进行插入插入,而栈比线性表特殊的地方的就是不能随意的插入和删除了,栈的插入和删除只能在规定的同一端进行,而被允许插入和删除的一端称为栈顶,另一端称为栈底. 从栈的特性中我们能发现:1).栈是一种后进先出的线性表,因为栈只有一个出入口,每次出栈是最后进的那个先出去,后一个才能出去,就像我们出电梯一样,里面的人被阻住,只有外面的人出去,

数据结构-栈的实现之括号匹配检测

假设表达式中只允许两种括号:().{}:正确表达顺序为:()或{}或({})或{({}{})}的形势:如{(}或(})或({)}的表达形势均不对.算法的设计思想: 出现左括弧则进栈: 出现右括弧则首先检测栈是否为空, 若栈空则表明此右括弧多余,表达式不匹配. 否则和栈顶数据比较,若匹配则栈顶出栈. 否则表明表达式不匹配: 最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配. 实现代码如下(Stack.h头文件为之前写的数据结构-栈的顺序结构中写的数组那个方法,用到了里面栈的结构和连个基本栈操作

基本数据结构-栈的实现及其运用

概述:数据结构是用来实现动态集合的方式.动态集合有两个要素,一是动态集合中的元素,二是动态集合上的操作如search(s,k):其中s为给定的集合,k为所要查询的关键字.Insert(s,k),delete,maximun,minimum,successor,predecessor等. 这里介绍几种简单的数据结构:栈,队列,链表,有根树. 一.栈 栈有一定限制的表,元素的插入和删除只能在表头进行,栈虽然缺少鲁棒性,但是更有效,并且很容易应用,栈后进先出.基本的操作包括进栈PUSH,出栈pop,判

数据结构——栈和队列相关算法实现

数据结构栈和队列的基本算法实现 限定性线性表--栈 栈的定义 栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行. 基本算法演示 /* 栈的常见操作: 1.初始化栈 2.元素进栈 3.元素出栈 4.栈的遍历 5.判断栈是否为空栈 6.清空整个栈 */ # include <stdio.h> # include <stdlib.h> typedef struct Node { int date; struct Node * pNext; }NODE,* PNO

C#数据结构—栈和队列

一:栈 栈和队列也是线性结构,线性表.栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制.栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表. 1:栈的定义及基本运算 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom).当栈中没有数据元素时叫