首页 > 其他 > 详细

栈的顺序存储C实现

时间:2014-04-05 13:06:01      阅读:438      评论:0      收藏:0      [点我收藏+]

栈是一种只能在一端进行操作的线性数据结构,数据的修改按后进先出(LIFO)原则进行。

以下是代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK  0
#define ERROR -1
#define OVERFLOW    1
#define STACK_INIT_SIZE 50
#define STACK_INCREMENT 10
typedef struct stack{
    int *base; //栈底指针
    int *top;   //栈顶指针
    int stack_size; //栈的存储空间大小
}sq_stack;
int init_stack(sq_stack *s)
{
    s->base = (int*)malloc(sizeof(int));
    if(!s->base)
        exit(OVERFLOW);
    s->top = s->base;
    s->stack_size = STACK_INIT_SIZE;
    return OK;
}
int push(sq_stack *s, int elem)
{
    //首先判断栈是否满
    if ( (s->top - s->base) >= s->stack_size )
    {
        s->base = (int*)realloc(s->base, (STACK_INCREMENT + s->stack_size)        *sizeof(int) );
        if(!s->base)
            exit(OVERFLOW);
        s->top = (s->base + s->stack_size);
        s->stack_size += STACK_INCREMENT;
    }
    *s->top = elem;
    s->top++;
    return OK;
}
int pop(sq_stack *s, int *elem)
{
    if (s->base == s->top)
        return ERROR;
    *elem = *(--s->top);
    return OK;
}
int get_top(sq_stack s, int *elem)
{
    if (s.base == s.top)
        return ERROR;
    *elem = *(s.top-1);
    return OK;
}
int get_length(sq_stack s)
{
    return (s.top -s.base);
}
int main()
{
    sq_stack s;
    int i, elem;
    init_stack(&s);
    //进栈
    for(i = 1; i < 10; i++)
    {
        push(&s, i);
        printf("%3d", i);
    }
    printf("\n");
    //出栈
    for(i = 1; i < 10; i++)
    {
        pop(&s, &elem);
        printf("%3d", elem);
    }
    printf("\n");
    return OK;
}


本文出自 “兵疯千里” 博客,请务必保留此出处http://slientradio.blog.51cto.com/7241495/1390771

栈的顺序存储C实现,布布扣,bubuko.com

栈的顺序存储C实现

原文:http://slientradio.blog.51cto.com/7241495/1390771

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!