文档章节

c语言中栈的应用

hanbing94
 hanbing94
发布于 2016/04/08 10:29
字数 413
阅读 29
收藏 1

c中栈的创建

栈(stack)又名堆栈,它是一种运算受限的线性表。

其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

c语言源码的实现了栈的一些基本操作,包括了创建空栈。

#include <stdio.h>
#include <stdlib.h>

#define Max 100

typedef char T;
 

 
typedef struct MyStack
{
    T aa[Max];
    unsigned int p;
               
} stack;
 
//创建空栈
stack* createEmptyStack()
{
      stack* st = (stack *)malloc(sizeof(stack));
      int i=0;
      for(i=0;i<Max;i++)
         st->aa[i]=0;
      st->p=0;
      return st;    
};
 
//栈判空
int isEmpty(const stack* st)
{
      if(st->p==0) return 1;
      else     return 0;
};
  
//求栈的大小
unsigned int size(const stack* st)
{
      return st->p;
};
 
//push操作
void push(stack* st,const T a)
{
      st->p=st->p+1;
      if(st->p==Max)
      {
          printf("栈满\n");
          st->p--;
          return;
      }
      st->aa[st->p]=a;    
};
 
//pop操作
T pop(stack* st)
{
      if(isEmpty(st))
      {
          printf("栈空");
          return NULL;
      }
      char t=st->aa[st->p];
      st->p=st->p-1; 
      printf("%c ",t);
      return t;     
};
 
//栈销毁
void destroy(stack* st)
{
    free(st);
};
 
int main()
{
     
    
    stack* st = createEmptyStack();
    if(isEmpty(st)) printf("MyStack is empty\n");
    else printf("MyStack is not empty\n");
    push(st,'a');
    push(st,'b');
    push(st,'c');
    push(st,'d');
    push(st,'e'); 
    printf("%d\n",size(st));
    while(!isEmpty(st)) pop(st);
    destroy(st);
    system("pause");
    return 0;
}


栈的应用:

1.数置转换,10转2,转8;


2.括号匹配


3.回文游戏

创建字符ni




© 著作权归作者所有

hanbing94
粉丝 2
博文 68
码字总数 38602
作品 0
朝阳
私信 提问
聊一聊栈(1)

栈是一种非常重要的数据结构,在计算机科学领域有着广泛的应用,本讲将和大家一起来探讨如何利用C语言的数组来实现栈。 首先来看一下栈的定义。 我们有编号为ABCDE的五个球,按照A~E的顺序依...

算法与编程之美
2017/04/07
211
2
C语言实现数据结构之栈的详解

在函数调用的过程中,需要的就是先进后出的特点,因此,栈就出现了。 栈是一种数据结构,是计算机怎么处理程序运行的一种方式。具有先进后出的特点,下面看的就是这些抽象的数据结构怎么用C...

ningcaichen66
2017/09/21
0
0
java基础---浅谈JVM的内存区域划分

浅谈JVM的内存区域划分 1.描述 在上学的过程中,记得C语言在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划...

android-key
2016/12/15
3
0
lua和c语言的交互详解(真的是非常详细)

前言 对于Lua的基础总结总算告一段落了,从这篇博文开始,我们才真正的进入Lua的世界,一个无聊而又有趣的世界。来吧。 Lua语言是一种嵌入式语言,它本身的威力有限;当Lua遇见了C,那它就展...

徐学良
2015/12/31
1K
0
JVM的内存区域划分

学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交...

胡壮壮
2017/04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部