专栏首页用户7494468的专栏关于栈的简单应用的小例子

关于栈的简单应用的小例子


栈是一种只允许在一端进行插入和删除操作的线性表。在栈中,进行操作的一端叫做栈顶,相应地,另一端称为栈底。


下面举一个简单的实例去理解对栈的操作:从键盘上输入一组数,然后按相反的顺序输出到屏幕上。


/*

2017年10月20日22:19:58

目的;创建一个简单的栈,从键盘上输入一组正数,然后按相反的顺序输出。

*/

#include<stdio.h>

#include<stdlib.h>

#define LEN sizeof(struct node)

#define TRUE 1

#define FALSE 0

typedef struct node

{

int data;

struct node *next;

} Stack;

int main()

{

//函数声明

void StackInit(Stack *top);

int IsEmpty(Stack *top);

int Push(Stack *top, int x);

int Pop(Stack *top, int *x);

//变量定义

int x;

Stack *top;

int i = 1;

top = (Stack *)malloc(LEN);

StackInit(top); //栈初始化

printf("Enter some positive integers:\n");

scanf("%d", &x); //输入结束标志为输入了小于等于0的数

while(x > 0) //入栈

{

Push(top, x);

scanf("%d", &x);

}

while(Pop(top, &x)) //出栈,只要栈顶指针不为空,继续循环

{

printf("%d\t", x);

if(i % 5 == 0) //一行5个元素

{

printf("\n");

}

i ++;

}

printf("\n");

return 0;

}

//栈初始化函数定义

void StackInit(Stack *top)

{

top->next = NULL;

}

//判断栈是否为空函数声明

int IsEmpty(Stack *top)

{

if(top->next == NULL)

return TRUE;

else

return FALSE;

}

//进栈函数定义

int Push(Stack *top, int x)

{

Stack *p;

p = (Stack *)malloc(LEN); //创建新节点

if(p == NULL)

{

return FALSE;

}

p->data = x;

p->next = top->next;

top->next = p; //栈指针后移

return TRUE;

}

//出栈函数定义

int Pop(Stack *top, int *x)

{

Stack *p;

if( IsEmpty(top) ) //判断栈是否为空

return FALSE;

p = top->next; //p指向栈顶后的一个节点

*x = p->data; //弹出数据元素

top->next = p->next; //栈顶指针前移

free(p); //释放内存空间

return TRUE;

}


/*

2017年10月20日22:50:40

在Code::Blocks中的输出结果为:

Enter some positive integers:

1 2 3 4 5 6 7 8 9 10 0

10 9 8 7 6

5 4 3 2 1

Process returned 0 (0x0) execution time : 14.118 s

Press any key to continue.


心得:栈与链表比较类似,比链表简单,至于其具体应用场合有哪些,还需要时间去学习。

*/

本文分享自微信公众号 - FPGA LAB(gh_af38c08c9983),作者:李佳姗

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FPGA基础知识极简教程(8)详解三态缓冲器

    三态门在FPGA以及ASIC设计中十分常用,随便举一个例子,在RAM的设计中(无论是同步读写RAM还是异步读写RAM设计),我们常将数据总线设计成inout类型...

    Reborn Lee
  • FPGA基础知识极简教程(10)二进制到BCD转换算法

    FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是具有优势的(或者是最正确的)。拿数字...

    Reborn Lee
  • FPGA基础知识极简教程(10)二进制到BCD转换算法

    FPGA基础知识极简教程(9)[1]讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是具有优势的(或者是最正确的)。...

    Reborn Lee
  • 栈的基本操作就是出栈和入栈,这两个的时间复杂度都是O(1) 数据结构 typedef struct Stack{ int data[MAXSIZE]; ...

    用户1154259
  • C++中的stack类、QT中的QStack类

    C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s;...

    张诺谦
  • java进阶|Stack源码解析和理解

    Stack这个数据结构还是比较容易理解的,满足LIFO,即先进后出,看下它的结构图,然后分析一下源码进行理解一下。

    后端Coder
  • F-Stack Q&A 第二期

    Q1:请问再视频领域,媒体服务器,使用F-Stack是否合适? A1:F-Stack在纯推流的模式上是支持且合适的,如果有转码服务等计算密集型服务,需要等我们支...

    F-Stack
  • 关于C/C++ 一些自己遇到的问题以及解惑

    有些自己遇到的,有一些是通过群友的提问应发的,问题本身的价值可能并不高,但其背后的原因才是我们应该学习的,下面我们来看看。

    花狗Fdog
  • C++11新特性——range for

    很多编程语言都有range for语法功能,自C++11起,终于将这个重要功能加入C++标准中。range for语句,可以方便的遍历给定序列中的每个元素并对其...

    Dabelv
  • C++初始化列表

    一、什么是初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段 二、...

    用户1215536

扫码关注云+社区

领取腾讯云代金券