栈的实现

的概念:

栈,仅限定为表尾进行插入或删除操作的线性表。

栈顶——top

栈底——bottom

特性

后进先出(last in first out)

C/C++实现栈的算法:

#include <malloc.h>  

#define STACK_INIT_SIZE 100  
#define STACK_INCREMENT 10  

#ifndef SElemType  
typedef int SElemType;  
#endif  

typedef struct{  
    SElemType *base;//栈底  
    SElemType *top;//栈顶  
    int stacksize;//栈的当前可使用的最大容量  
}SqStack;  

//构造一个空栈  
int InitStack(SqStack &stack);  

//销毁栈  
int DestroyStack(SqStack &stack);  

int GetTop(SqStack &stack,SElemType &data);  

int Push(SqStack &stack,SElemType data);  

int Pop(SqStack &stack,SElemType &data);  

//插入data为栈顶元素  
int Push(SqStack &stack,SElemType data);  


int InitStack(SqStack &stack)  
{  
    stack.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));  
    if(!stack.base)return 0;  
    stack.top = stack.base;  
    stack.stacksize = STACK_INIT_SIZE;  
    return 1;  
}  

int DestroyStack(SqStack &stack)  
{  
    if(stack.top == stack.base)return 1;  
    free(stack.base);  
    stack.base = stack.top = NULL;  
}  

int GetTop(SqStack &stack,SElemType &data)  
{  
    if(stack.top == stack.base)return 0;  
    data = *(stack.top - 1);  
    return 1;  
}  

int Push(SqStack &stack,SElemType data)  
{  
    if((stack.top-stack.base) >= stack.stacksize)//满栈,添加存储空间  
    {  
        /*realloc 内存扩大,并拷贝源内存数据*/  
        stack.base = (SElemType *)realloc(stack.base,(stack.stacksize+STACK_INCREMENT)*sizeof(SElemType));  
        if(!stack.base)return 0;  
        stack.top = stack.base + stack.stacksize;  
        stack.stacksize += STACK_INCREMENT;  
    }  
    *stack.top++ = data;  
    return 1;  
}  

int Pop(SqStack &stack,SElemType &data)  
{  
    if(stack.top == stack.base)return 0;  
    data = *(--stack.top);  
    return 1;  
}  

int IsEmpty(SqStack &stack)  
{  
    if(stack.top != stack.base)return 0;  
    return 1;  
}  

栈的应用:

数值转换
输入任意一个非负10进制整数,打印输出其对应的8进制整数:

//数制转换——将10进制转成8进制  
void ConversionToO()  
{  
    SqStack stack;  
    int d;  
    InitStack(stack);  
    scanf("%d",&d);  
    while(d)  
    {  
        Push(stack,d%8);  
        d /= 8;  
    }  
    while(!IsEmpty(stack))  
    {  
        Pop(stack,d);  
        printf("%d",d);  
    }  
    printf("\r\n");  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值