链接栈

#include <iostream>
using namespace std;
typedef int stackEntry;

const int overflow = 1;
const int underflow = 2;
const int success = 0;

struct Node
{
	stackEntry data;
	Node *next;
};

class stack
{
public:
	stack();
	bool empty() const;
	int push(const stackEntry &item);
	int pop();
	int top(stackEntry &item) const;
//	void operator = (const stack &original);
//	stack(const stack &original);
protected:
	Node *top_node;
};

stack::stack()
{
	top_node = NULL;
}

int stack::push(const stackEntry &item)
{
	Node *new_top = new Node;

	//为元素item构建新的节点,该节点指向原来的栈顶元素
	if (new_top == NULL)
		return overflow;
	new_top->data = item;
	new_top->next = top_node;
	top_node = new_top;
	return success;
}

int stack::pop()
{
	Node *old_top = top_node;
	if (old_top == NULL)
	{
		return underflow;
	}
	top_node = old_top->next;
	delete old_top;
	return success;
}

int stack::top(stackEntry &item) const
{
	if (top_node == NULL)
		return underflow;
	item = top_node->data;
	return success;
}

bool stack::empty() const
{
	if (top_node != NULL)
		return false;
	return true;
}

int main()//乘客上下飞机模拟程序
{
	int n;
	int item;
	stack passengers;
	stack temp;
	cout << "输入乘客人数n" << endl;
	cin >> n;
	cout << "按登机顺序输入乘客编号" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> item;
		temp.push(item);
	}
	passengers = temp;
	cout << endl << endl;
	cout << "乘客下机顺序是:";
	while (!passengers.empty())
	{
		passengers.top(item);
		cout << item << " ";
		passengers.pop();
	}
	cout << endl;
}

  

时间: 2024-10-10 15:12:58

链接栈的相关文章

使用JAVA数组实现顺序栈

1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList 实现了顺序表,java.util.LinkedList 实现了链接表的功能. java.util.ArrayDeque实现了顺序栈和顺序队列(该类中即定义了与栈操作有关的方法,也定义了与队列操作有关的方法).java.util.LinkedList实现了链接栈和链接队列. 2,定义了一个Stack

数据结构之栈和队列实现

栈接口的定义 public interface Stack { void push(Object obj); Object pop(); Object peek(); boolean isEmpty(); void clear(); } 栈的顺序存储结构操作实现 public class SequenceStack implements Stack { final int minSize=10; private Object[] stackArray; private int top; publ

栈的应用之进制转化

顺序栈的代码: 不再赘述:点击打开链接 //栈的应用-----进制转化 #include"stack.h" int main() { Stack st; InitStack(&st); int select; int num1; //要转化的数 int num2; //转化之后各个位的数 int flag = 1; //控制循环结束 while(flag) { cout<<"****************进制转换*****************&quo

数据机构实验报告-实验三 二叉树基本操作的实现

实验三   二叉树基本操作的实现   l  实验目的 1.二叉树的基本操作 (1)掌握二叉树链表的结构和二叉排序树的建立过程. (2)掌握二叉树排序树的插入和删除操作. (3)加深对二叉树的理解,逐步培养解决实际问题的编程能力. 2.树的遍历和哈夫曼树 (1)掌握用递归方法实现二叉树遍历的操作. (2)掌握用非递归方法实现二叉树遍历的操作. (3)掌握建立Huffman树的操作. (4)加深对二叉树的理解,逐步培养解决实际问题的编程能力. l  实验内容 1.二叉树的基本操作 (一)基础题 (1

学习进度表(补)

周数 专业学习目标 专业学习时间 新增代码量 博客发表量 知识总结   第2周  接触数据结构      2小时   30条    0 深不可测  第3周 数据结构——线性表 4小时 100条  1 阅读<我是一只IT小小鸟> 学习数据结构的基础知识 第4周 HTML5的元素和属性 3小时 20 1 阅读<世界是数字的> 学习HTML5基础知识 第5周 数据结构——栈和队列  4小时 100条 0 阅读<C语言从入门到精通> 链接栈和队列概念以及结构和操作 第6周 HT

66-Reorder List

Reorder List My Submissions QuestionEditorial Solution Total Accepted: 64392 Total Submissions: 281830 Difficulty: Medium Given a singly linked list L: L0→L1→-→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do this in-place without altering

Data Structures Key Mind

线性表 数组 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素.如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组. 链表 链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起.比如:上一个元素有个指针指到下一个元素,以此类推,直到最后

七方件业金离以提领前群约会ODjdidtlwfWv

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

转:《链接、装载与库》里的一个错误:关于调用栈

<链接.装载与库>里的一个错误:关于调用栈 按照原文中描述做了一个PPT: 每次执行push指令时,esp都会减4(因为栈是向低地址增长的),每次pop时esp都会加4. 指令:push a 指令:push b 指令: 1.把main方法当前指令的下一条指定地址(即return address))push到栈中. 2.使用call指令调用目标函数体. 指令:将ebp的当前值push到栈中,即saved ebp. 指令:将esp的值赋给ebp,则意味着进入了foo方法的调用栈. 指令:push