堆栈(简单应用 · 数据结构)

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

#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++






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值