• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Jesus Program
博客园    首页    新随笔    联系   管理    订阅  订阅
栈的表示与实现
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;
}
posted on 2009-09-20 21:33  Jesus Program  阅读(160)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3