堆栈(简单的应用)

原创 2018年04月16日 19:30:21

这里是一个简单的堆栈的应用。

#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100

typedef struct SNode *PtrToSNode;
typedef int Position;
struct SNode
{
	int *date;
	int Top;
	int MaxSize;
};
typedef PtrToSNode Stack;

void show();
Stack CreatStack(int MaxSize);
bool isfull(Stack S);
bool Push(Stack S, int X );
bool isempty(Stack S);
int Pop(Stack S);
void Transfer(Stack S, int date );

int main()
{
	int i, date=0, n=0;
	Stack S = (Stack)malloc(sizeof(struct SNode));
	
	while(1)
	{
	    show();
	    scanf("%d", &n);
	    if( n==0 )
	    break;
	    
        switch(n)
        {
       	case 1:
        {
       	S = CreatStack(MAXSIZE);
        i = 0;
        printf("输入数字,输入0时退出:");	
        while(1)
	        {
	        scanf("%d", &date);
	        if(date == 0 || i>MAXSIZE)
	        break;
	        Push(S, date);
	        i++;
	        }
        }
        break;
       
        case 2:
        printf("出栈数字为:%d\n\n", Pop(S));
        break;
       
        case 3:
        {
        printf("当前堆栈顺序为:");
		while(true)
	        {
	        	printf("%d", Pop(S));
	        	if( S->Top == -1 )
	        	break;
	        }
	        printf("\n\n");
        }
        break;
       
        case 4:
        {
	   	printf("请输入一个十进制的正整数:");
		scanf("%d" , &date);
		S = CreatStack(MAXSIZE); 
	    Transfer(S, date);
        }
        break;
        }
    }
}
Stack CreatStack(int MaxSize)
{
	Stack S = (Stack)malloc(sizeof(struct SNode));
	S->date = ( int * )malloc(MaxSize*sizeof(int));
	S->Top = -1;
	S->MaxSize = MaxSize;
	
	return S;
}

bool isfull(Stack S)//查看是否栈满 
{
	return ( S->Top == S->MaxSize-1 );
}
bool Push( Stack S, int X )//入栈操作 
{
	if(isfull(S))
	{
	printf("堆栈满");
	return false;
	}
	else
	{
	S->date[++(S->Top)] = X;
	return true;
    }
}

bool isempty(Stack S)
{
	return (S->Top==-1);
}

int Pop(Stack S)//出栈操作 
{
	if(isempty(S))
	{
		printf("堆栈空");
	    return false;	
	}
	else
	{
		return (S->date[(S->Top)--]);
	}
}

void Transfer(Stack S, int date )
{
	Position u=date, k=0;
	while(u)
	{   
		k = u%2;
		u = u/2;
		Push(S, k);
	}
	while(1)
    {
    	printf("%d", Pop(S));
    	if( S->Top==-1 )
    	break;
    }
}

void show() //显示堆栈菜单 
{
	printf("\n\n");
	printf("                        堆栈显示系统            \n"); 
	printf("               *******************************\n");
	printf("               *        1-----进 栈          *\n"); 
	printf("               *        2-----出 栈          *\n");
	printf("               *        3-----显 示          *\n");
	printf("               *        4-----数 字 转 换    *\n");
	printf("               *        0-----返 回          *\n");
	printf("               *******************************\n");
	printf("\n");
	printf("请选择菜单序号输入:"); 
}



编译器:DEV C++






全国IP地址分配表(一)

全国IP地址分配表(一)关键词:NT, 计算机安全, 其他全国IP地址分配表(一)     xa.sn.cn,西安公众网,西安,陕西,CN,202.100.0.*   xa.sn.cn,西安公众网,西...
  • ghj1976
  • ghj1976
  • 2001-02-27 11:10:00
  • 1666

(堆栈的应用)简单行编辑程序

  • 2010年12月23日 10:36
  • 2KB
  • 下载

理解堆栈及其利用方法

下午详细膜拜了一浪大牛的《无符号和栈破坏情况下coredump的分析方法》, 此刻惊魂未定,激动不已, 既然谈到了堆栈, 就跟大家分享下我认识和理解的堆栈, 希望对大家有所帮助。     ...
  • a15874647
  • a15874647
  • 2014-12-04 15:28:12
  • 1712

个人对于堆栈的理解(简单通俗)

最近在做安装包(Inno Setup),也没好好看C++,然后安装包出了点小问题,说是堆溢出,自己也没理解透堆栈这个概念,在这里我就简单的总结一下。   1.堆     在C++ 中,只有程序员自己分...
  • u013059441
  • u013059441
  • 2017-03-08 11:48:31
  • 852

堆栈应用——括号匹配问题

假设一个算术表达式中包含圆括号()、方括号[]和花括号{}三类括号,要求判断表达式中括号是否正确匹配配对。 分析:括号匹配符号后到的括号要最先被匹配,所以满足栈“后进先出”的特点。 括号匹配共有四...
  • sinat_32561655
  • sinat_32561655
  • 2017-03-30 15:44:51
  • 683

Android使用adb获得当前应用 activity堆栈信息

1、获取所用应用 adb shell dumpsys activity 2、获取自己的应用 adb shell dumpsys activity | grep com.xxx.xxx...
  • u010483428
  • u010483428
  • 2014-12-02 17:26:08
  • 6381

堆栈的应用--行编辑程序

//均已调试通过,编译器为DEV C++//行编辑程序#include #define Stack_Size 100#define MAX 500typedef struct {        cha...
  • zdwzzu2006
  • zdwzzu2006
  • 2007-10-21 00:33:00
  • 1417

栈的应用——实现简易计算器(一)

周日晚上心血来潮,想用栈做个简单的计算器,于是便动手鼓捣了。参照书上的思想,我用了两个栈来解决这个问题。 1)栈S1用来存放运算符,栈S2用来存放操作数。由于运算符为char型而操作数为int型...
  • larry233
  • larry233
  • 2016-03-29 13:05:04
  • 900

数据结构-堆栈和队列的实验

堆栈 队列
  • hling_so
  • hling_so
  • 2016-10-18 18:10:20
  • 594

算法——括号匹配问题(堆栈应用)

【例】假设有一个算术表达式包含圆括号、方括号和花括号,编写一个函数,用来判别表达式中的括号是否正确匹配,并设计一个测试主函数。【分析】括号匹配共有一下四种情况: ①左、右括号匹配不正确; ②右括号...
  • xiaofei__
  • xiaofei__
  • 2016-04-09 18:50:27
  • 622
收藏助手
不良信息举报
您举报文章:堆栈(简单的应用)
举报原因:
原因补充:

(最多只允许输入30个字)