栈简单运用

读入n个整数

定义栈数据类型

定义栈的初始化、判空、判满、入栈、出栈函数

写一主函数,完成n个数的读入和逆序输出

#include<stdio.h>
#define stacksize 100
#define OK 1
#define ERROR 0
#define Overflow -1
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType data[stacksize];
    int top;
}SeqStack;
//定义栈数据类型

void InitStack(SeqStack &s)
{
    s.top = 0;
}
//栈的初始化

int StackEmpty(SeqStack s)
{
    return (s.top == 0);
}
//判断栈空

int StackFull(SeqStack s)
{
    return (s.top == stacksize);
}
//判断栈满

Status Push(SeqStack &s, ElemType x)
{
    if(StackFull(s))
        return Overflow;
    s.data[s.top++] = x;
    return OK;
}
//入栈

Status Pop(SeqStack &s, ElemType &e)
{
    if(StackEmpty(s))
        return Overflow;
    e = s.data[--s.top];
    return OK;
}
//出栈

Status GetTop(SeqStack s, ElemType &e)
{
    if(StackEmpty(s))
        return Overflow;
    e = s.data[s.top - 1];
    return OK;
}
//取栈顶元素

void StackTravel(SeqStack s)
{
    int i;
    for(i = 0 ; i < s.top ; i++)
        printf("%d ", s.data[i]);
}
//遍历,显示栈中元素

int main()
{
    int i, n, d;
    SeqStack s1;
    InitStack(s1);
    scanf("%d", &n);
    for(i = 0 ; i < n ; i++)
    {
        scanf("%d", &d);
        Push(s1, d);
    }
    StackTravel(s1);
    printf("\n");
    GetTop(s1, d);
    printf("栈顶元素是%d\n", d);
    Pop(s1, d);
    printf("出栈元素是%d\n", d);
    StackTravel(s1);
    printf("\n");
    return 0;
}
时间: 2025-01-14 12:28:26

栈简单运用的相关文章

STL的队列和栈简单使用

STL的队列和栈简单使用 #include <iostream>#include <cstdio>#include <string.h>#include <algorithm>#include <queue>#include <stack>using namespace std;int main(){ queue<int> Q; stack<int> S; int i; for(i=1;i<=10;i++

[转载]C++ 堆与栈简单的介绍

在C和C++中,有三种使用存储区的基本方式: [静态存储区(Static   Memory)] 在静态存储区中,连接器(linker)根据程序的需求为对象分配空间.全局变量.静态类成员以及函数中的静态变量都被分配在该区域中.一个在该区域中分配的对象只被构造一次,其生存期一直维持到程序结束.在程序运行的时候其中的地址是固定不变的.在使用线程(thread,共享地址空间的并发物)的程序里,静态对象可能会引起一些问题,因为这时的静态对象是被共享的,要对其正常访问就需要进行锁定操作. [自动存储区(Au

后进先出 栈 简单应用

Description 在PushPop城中有一个著名的火车站,车站铁路如图所示.每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合.假设从A方向驶来的火车有N节车厢(N≤1000),分别按顺序编号为1,2,…,N.负责车厢调度的工作人员需要知道能否使它以A1,A2,…,An的顺序从B方向驶出.请你编写程序,用来判断能否得到指定的车厢顺序.假定在进入车站之前每节车厢之间都是不连着的,并且它们可以自行移动,直到处在B方向的铁轨上.另外假定车站可以停放任意多的车厢

每日一题之LeetCode 栈简单题集合496,682,232,225,155,844,20

496 下一个最大的元素方法1 :自己瞎写的 没有考虑到栈的特性class Solution:def nextGreaterElement(self, nums1, nums2): L=[] for i in nums1: k=nums2.index(i) lenth2=len(nums2) if k==lenth2-1: L.append(-1) for j in range(k+1,lenth2): if nums2[j]>i: L.append(nums2[j]) break if j==

不使用栈简单实现括号匹配算法

刚刚做数据结构作业时有这样一道书本习题,题目如下: 3.2 假设以I和O分别表示进栈和出栈操作,栈的初态和终栈均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列. (1)下面所示的序列中哪些是合法的? A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO (2)通过对(1)的分析,写出一个算法判定所给的操作序列是否合法.若合法则返回1:否则返回0.(假设被判定的操作序列已存入一位数组中). 第一题思考了一下,AD 第二题本来想用栈来做,但似乎又没有

链栈简单操作

/*设置一个静态变量记链表值的个数入栈是头插法 */#include<stdio.h>#include<stdlib.h>#include<malloc.h>static int count=0;typedef struct node{ int data; struct node *next;}stacknode,*linkstack;/*typedef struct stack{ struct stack pop; struct stack bottom;}stack

二叉树遍历,递归,栈,Morris

一篇质量非常高的关于二叉树遍历的帖子,转帖自http://noalgo.info/832.html 二叉树遍历(递归.非递归.Morris遍历) 2015年01月06日 |  分类:数据结构 |  标签:二叉树遍历 |  评论:8条评论 |  浏览:6,603次 二叉树遍历是二叉树中最基本的问题,其实现的方法非常多,有简单粗暴但容易爆栈的递归算法,还有稍微高级的使用栈模拟递归的非递归算法,另外还有不用栈而且只需要常数空间和线性时间的神奇Morris遍历算法,本文将对这些算法进行讲解和实现. 递归

数据结构之栈定义及基本操作实现

终于有可以有时间写点数据结构的学习总结了,前段时间一直在紧张的忙一些项目,都没有空出时间来学习数据结构,现在终于可以稍微喘口气了,还是数据结构有意思,这两天看了点栈的东西,写下来总结一下,有错误的地方希望看到的朋友指出来,感激不尽. 根据学习,栈就是一种线性数据结构,栈的运算只能在表的一段进行,所以这种数据结构具有“后进先出”的特点. 接下来是栈的c语言实现.其中栈由一个top节点和bottom节点组成,这两个节点分别指向栈的顶部和底部.其中栈的组成结点是由结构体实现,结构体由数据库和指向下一个

Callable、Future&amp;阻塞队列&amp;阻塞栈

Callable.Future   简单应用 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. Code public class Test {