栈的表示与实现

ContractedBlock.gif ExpandedBlockStart.gif Code
//栈的表现和实现
#include<stdio.h>
#include
<malloc.h>
#include
<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define Stack_init_size 100
#define Stackincrement 10
struct Sqstack
{

    
char *base;
    
char *top;
    
int stacksize;
};
int InitStack(struct Sqstack *s)//初始化栈
{
    s
->base=(char *)malloc(Stack_init_size*sizeof(char));
    
if(!s->base)
        exit(OVERFLOW);
    s
->top=s->base;
    s
->stacksize=Stack_init_size;
    
return OK;
}
int StackEmpty(struct Sqstack *s)//若栈为空,则返回TRUE,否则返回FALSE
{
    
if(s->top==s->base)
        
return TRUE;
    
else
        
return FALSE;
}
int GetTop(struct Sqstack *s,char *e)//若栈不空,则用e返回s的栈顶元素,并返回OK;否则返回ERROR
{
   
if(s->top==s->base)
       
return ERROR;
   
*e=*(s->top-1);
   
return OK;
}
int Push(struct Sqstack *s,char e)//插入元素e为新的栈顶元素
{
    
if(s->top-s->base>=s->stacksize)
    {
        s
->base=(char *)realloc(s->base,(s->stacksize+Stackincrement)*sizeof(char));
        
if(!s->base)
            exit(OVERFLOW);
        s
->top=s->base+s->stacksize;
        s
->stacksize+=Stackincrement;
    }
    
*s->top++=e;
    
return OK;
}
int Pop(struct Sqstack *s,char *e)//若栈不空,则删除s的栈顶元素,并用e返回其值,并返回OK,否则返回ERROR
{
    
if(s->top==s->base)
        
return ERROR;
    
*e=*(--s->top);
    
return OK;
}

//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 
void conversion()
{
    Sqstack s;
    
int N;
    
char e;
    InitStack(
&s);
    scanf(
"%d",&N);
    
while(N)
    {
        Push(
&s,N%8);
        N
=N/8;
    }
    
while(!StackEmpty(&s))
    {
        Pop(
&s,&e);
        printf(
"%d",e);
    }

}
//conversion
int main()
{
    printf(
"Input:\n");
    conversion();
    printf(
"\n");
    
return OK;
}

转载于:https://www.cnblogs.com/JesusParadise/archive/2009/09/20/1570611.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值