简单数据结构之栈模拟


  1 /**************************************************************************************
2 * Function : 模拟栈
3 * Create Date : 2014/04/23
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 * 任何单位和个人不经本人允许不得用于商业用途
8 * Version : V0.1
9 ***************************************************************************************
10 题目:简单数据结构之栈模拟
11
12 **************************************************************************************/
13 #include<stdio.h>
14
18 #define M 10 //栈最大高度
19
20 typedef struct stack
21 {
22 int data[M];
23 int high;//栈当前高度
24 }Stack;
25
26 int sample[M];
27 int result[M];
28
29 void init_stack(Stack *a);//栈初始化
30 int push_stack(Stack *a,int value);//进栈
31 int pop_stack(Stack *a);//出栈
32 int get_top_element(Stack *a);//获取栈顶的元素
33
34 // The first method:
35 int main()
36 {
37 int i=0;
38 Stack sq;
39 init_stack(&sq);
40
41 freopen("input.txt","r",stdin);
42
43 for(i=0;i<M;i++)
44 scanf("%d",&sample[i]); // get input data
45 pop_stack(&sq);
46 get_top_element(&sq);
47
48 for(i=0;i<M;i++)
49 push_stack(&sq,sample[i]);
50 push_stack(&sq,100);
51
52 for(i=0;i<M;i++)
53 result[i]=pop_stack(&sq);
54
55 for(i=0;i<M;i++)
56 {
57 printf("%d\t",result[i]);
58 fflush(stdout);//修复Eclipse printf()不能显示的小bug
59 }
60
61 printf("\n");
62 fflush(stdout);
63
64 return (0);
65 }
66
67 void init_stack(Stack *a)//栈初始化
68 {
69 (*a).high=0;
70 }
71
72 int push_stack(Stack *a,int value)//进栈
73 {
74 if((*a).high==M)
75 {
76 printf("Stack is full, can not push !!! \n");
77 fflush(stdout);
78
79 return (-1);
80 }
81 else
82 {
83 if( (*a).high==0 )
84 {
85 (*a).data[0]=value;
86 (*a).high++;
87 return (1);
88 }
89 else
90 {
91 (*a).data[ (*a).high ]=value;
92 (*a).high++;
93 return (1);
94 }
95 }
96 }
97
98 int pop_stack(Stack *a)//出栈
99 {
100 int tmp=0;
101 if((*a).high==0)
102 {
103 printf("Stack is empty, can not pop !!! \n");
104 fflush(stdout);
105 return (-1);
106 }
107 else
108 {
109 tmp=(*a).data[ (*a).high -1];
110 (*a).high--;
111
112 return (tmp);
113 }
114
115 }
116 int get_top_element(Stack *a)//获取栈顶的元素
117 {
118
119 int tmp=0;
120 if((*a).high==0)
121 {
122 printf("Stack is empty, can not get top element !!! \n");
123 fflush(stdout);
124 return (-1);
125 }
126 else
127 {
128 tmp=(*a).data[ (*a).high -1];
129 return (tmp);
130 }
131
132 }
133
13

简单数据结构之栈模拟,码迷,mamicode.com

时间: 2024-10-15 08:20:44

简单数据结构之栈模拟的相关文章

简单数据结构之队列模拟

1 /************************************************************************************** 2 * Function : 模拟队列 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

数据结构和算法之栈和队列一:两个栈模拟一个队列以及两个队列模拟一个栈

今天我们需要学习的是关于数据结构里面经常看到的两种结构,栈和队列.可以说我们是一直都在使用栈,比如说在前面递归所使用的的系统的栈,以及在链表倒序输出时介绍的自定义栈类Stack和使用系统的栈进行递归.那么,在这里我们就讲述一下这两个比较具有特色的或者说关系比较紧密的数据结构之间的互相实现问题. 一:两个栈模拟实现一个队列: 栈的特点是先进后出,然而队列的特点是先进先出. public class Queen(Stack s1,Stack s2){ //实现插入的方法 public void ad

数据结构之栈的简单应用(判断字符串中括号的合法性)

数据结构之栈(判断字符串中括号的合法性) 栈的定义 栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为"栈顶",相应的另一端称为"栈底":另外其还有先进后出,后进先出的特征. 栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构.集合结构.树形结构和图形结构,如下图所示,栈是一种特殊的线性表,是线性结构的一种. JavaScrip

web前端面试系列 - 数据结构(两个栈模拟一个队列)

一. 用两个栈模拟一个队列 思路一: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时将数据压人s1 3. 出队时将s1弹出,并压人s2,然后弹出s2中的顶部数据,最后再将剩余数据弹出s2,并压人s1. 思路二: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时,判断s1, 是否为空,如果不为空,则将数据直接压入s1, 如果为空,则将s2中的数据全部倒入s1,在将数据压人s1. 3. 出队时,判断s2, 是否为空,如果不为空,则直接弹出s2

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开

浅谈算法和数据结构: 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

用有限个栈模拟常数效率操作的队列

问题来源 写这篇博客来源于一次面试的经历.不过并不是我被面试,而是我面试别人.如何用两个栈实现一个队列?这算是一个经典的面试题.因为它经常被拿来用.如果对栈和队列比较掌握的人,就可以轻松的答出来. 然而,那天坐在对面的面试者直接抛出:如何用有限个栈模拟常数效率操作的队列呢?作为一个面试官,我佯装镇定,因为这个和用栈实现队列可是一个天上一个地下的区别.听他说完.之后几个小时的面试,我根本无心面试,脑子里一直在想:他刚才说了啥?到底是怎么操作的?太优秀了! 看完这篇文章,以后面试别人或者被面试的过程

[数据结构]单调栈的基本应用2

[数据结构]单调栈的基本应用2 一.前言 单调栈的基本应用2是单调栈的基本应用1的延伸.应用2主要解决的是二维平面的一些问题. 二.基本应用2 虽然已经应用到二维平面,但是单调栈的思想并没有变化 更多应用的是延伸的位置.本质是ai的左/右第一个大于ai的元素位置 下面列举的一些平面内单调栈的例题: 例1: POJ2559 最大矩形面积 题目描述: 给定n个依次排列并且面积为1*hi的矩形,现求这个图形所包含最大的矩形的面积. 上图中7个矩形的h依次为2 1 4 5 1 3 3.注意题目有多组数据

自定义栈的实现及使用两个栈模拟队列

一,使用单链表实现栈 ①栈需要一个栈顶指针 ②栈的基本操作有出栈和入栈,以及判断栈是否为空 ③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针.因此,在栈内部需要实现一个单链表.代码如下: public class Stack<T extends Comparable<? super T>>{ private class Node{ T ele; Node next; public Node(T ele) { this.ele = ele; } } Node top;