C++中利用链表实现一个栈

在实现栈之前应该思考栈的一些用法:

push

pop

top

isempty

想清楚栈顶的组成;

下面是实现代码:

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 typedef int dataType;
 6
 7 struct node        //链栈节点
 8 {
 9     dataType val;   //数值
10     node *next;     //指针域
11 };
12
13 class lstack
14 {
15 public:
16     lstack();
17     ~lstack();
18     void push(dataType var); //压栈
19     void pop();                    //出栈
20     dataType topval();                //取栈顶元素
21     bool isEmpty();             //判断是否为空
22 private:
23     node * top;                    //栈顶指针,top等于NULL表示空栈
24 };
25
26 lstack::lstack()
27 {
28     top = NULL;                    //top等于NULL表示栈为空
29 }
30
31 lstack::~lstack()
32 {
33     node *ptr = NULL;
34     while(top != NULL){
35         ptr = top->next;
36         delete top;
37         top = ptr;
38     }
39 }
40
41 void lstack::push(dataType a)
42 {
43     node *ptr = new node;
44     ptr->val = a;                //新栈顶存值
45     ptr->next = top;            //新栈顶指向旧栈顶
46     top = ptr;                  //top指向新栈顶
47 }
48
49 void lstack::pop()
50 {
51     node *ptr = top->next;        //预存下一节点的指针
52     delete top;                    //释放栈顶空间
53     top = ptr;                    //栈顶变化
54 }
55
56 dataType lstack::topval()
57 {
58     return top->val;            //返回栈顶元素,并不判断栈是否已空
59 }
60
61 bool lstack:: isEmpty()
62 {
63     return top == NULL;         //栈顶为NULL表示栈空
64 }
65
66 int main()
67 {
68     lstack test;                // test 为链表构成的栈
69     int i=0;
70     for(i=0;i<10;i++)
71     {
72         test.push(i);
73     }
74     cout<<"栈中的值为:"<<endl;
75     for(i=0;i<10;i++)
76     {
77         if(!test.isEmpty())
78         {
79             cout<<test.topval()<<endl;
80             test.pop();
81         }
82     }
83     return 0;
84 }
时间: 2024-08-03 11:20:26

C++中利用链表实现一个栈的相关文章

简析quakeIII中利用链表实现的内存管理(1)

因为工作主要环境是单片机,所以平时很少使用链表.偶然看到quakeIII源码中有使用链表实现的内存分配的内容,特别摘出自己感兴趣的地方来并添加简短的注释.目前只对malloc的地方增加汉字说明,理解了malloc,其他地方也就自然理解了. 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include<windows.h> 5 6 #define ZONEID 0x1d4

设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值,push、pop、min三个方法的时间复杂度必须是O(1)

1 /* 2 * 设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值, 3 * push.pop.min三个方法的时间复杂度必须是O(1) 4 * 一种解法是在Stack类里添加一个Int型的minValue,当minValue出栈时,我们会搜索整个栈 5 * 找出最新的最小值,但是却不符合操作时间为O(1)的要求 6 * 如有: 7 * push(4)//最小值:4 8 * push(5)//最小值:4 9 * push(3)//最小值:3 10 * push(1)

011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值. push,pop和min函数的时间复杂度都为O(1). 看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否? 如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值. 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办. 既然只用一个变量没法解决这个问题,那我们就增加变量.如果说每个结点除了保存当前的 值, 另外再保存一个从该结点到栈底的

实现一个栈,并且实现一个min函数用来找当前栈中最小的元素

题目描述:实现一个栈,并且实现一个min函数用来找当前栈中最小的元素 分析:要找到栈中最小的元素,需要借助一个辅助栈,来存放当前栈中最小的元素. 入栈的时候,第一个入栈的元素,也给辅助栈入栈,此后每次入栈的元素先与辅助栈的栈顶元素比较,如果小于或等于辅助栈的栈顶元素,则同时将该元素给辅助栈入栈. 如下图所示: 出栈的时候,如果栈顶元素与辅助栈栈顶的元素相等,则同时对辅助栈进行出栈操作 如下图所示: 这样就可以保证,辅助栈中的栈顶元素始终是当前栈中最小的元素了 代码如下: #include<ios

利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)

这是<基于服务的软件系统>的课程设计: 一.作业要求 编写查询员工信息的Web服务(员工信息存储在数据库中).第一个Web服务:输入员工号,返回该员工号的员工的基本信息,包括员工号.员工名称.所在部门.出生日期.职位.职称.入职日期等信息.第二个Web服务:输入部门.职称,返回该部门具有该职称的所有员工的基本信息,员工基本信息与上面相同.分别针对上述两个Web服务,分别编写调用这两个Web服务的程序(或网页).要求在输入界面上输入待查询数据,调用Web服务,并将Web服务返回的员工信息查询结果

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

闭关修炼中 *** Java常用算法之 -- 栈结构

什么是栈结构: 栈结构从数据的运算来分类,栈结构具有特殊的运算规则. 从数据的逻辑结构来看,栈结构其实就是一种线性结构. but!!! 从数据的存储结构来划分,栈结构分为两类: 顺序表结构:即用一组地址连续的内存单元依次保存栈中的数据.在程序中,可以定义一个 指定大小的结构数组来作为栈,序号为0的元素就是栈底,在定义一个top保 存栈顶的序号. 链式栈结构:即使用链式形式保存栈中各元素的值.链表首部(head引用所指向元素)为栈顶, 链表尾部(指向地址为null)为栈底. 栈结构遵循:后进先出(

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

使用两个队列实现一个栈

首先,我们得了解队列和栈的基本原理. 队列是一个"先进先出"的一个结构.队列的定义是在队尾插入,在队头删除,这就要求要用一种在尾部插入容易的,在头部删除容易的结构,你一定会想到单链表,对,库的实现就是用一个链表实现的. 栈,相信大家都不会陌生,函数栈帧等的实现,它是一种"先进后出"的结构.栈的插入删除都是在尾部进行的. 所以要用队列实现一个栈,要解决的问题就是在删除时要删除最后插入的那个元素.   我们先来模拟一下出栈和入栈的情况: (1)入栈:Q1:1,2,3,4