C语言指针(七)--栈

数据结构利用C语言实现可以很好的练习指针的使用。我们日常编程工作离不开对数据结构知识的应用。二者结合学习可以夯实我们语言基础同时加深对数据结构的理解。

栈,计算机专业毕业的读者想必在数据结构课程中都有过了解。栈作为一种先进后出的数据结构应用广泛。比如,我们记录访问路径,用户按返回按键可以原路返回。这样的功能就要借助栈这种数据结构来实现功能。

我把栈看作一个箱子,这个箱子准备放很多的书。而且,这个箱子一层只能放一本书。我们把书放入箱子的过程叫做压栈(push),我们把书从箱子中取出来叫出栈(pop)。我们想象一下就会发现,先放进去的书总是后取出来,最先放进去的最后取出来,最后放进去的最先取出来。所我们称最先放进去的为栈低,最后放进去的为栈顶。
栈
根据前面说的,有的读者会发现其实栈并不关心数据的存储结构,栈只关心数据的存取顺序。所以程序员在实现栈时可以用数组实现同时也可以选择链表实现。

下面是我用数组实现的栈同时也演示了数组指针的使用:

#include <stdio.h>
#include <stdlib.h>

struct Stack
{
    int box[20];
    int *bottom;
    int *top;
};

void init(struct Stack *stack)
{
    stack->bottom = stack->box;
    stack->top = stack->box;
}

void push(struct Stack *stack,int data)
{
    if(stack->top - stack->bottom < 19)
    {
        *(stack->top) = data;
        stack->top++;
    }
}

int pop(struct Stack *stack)
{
    int ret = 0;
    if(stack->top > stack->bottom)
    {
        stack->top--;
        ret = *(stack->top);
    }
    return ret;
}

int main()
{
    struct Stack stack;
    init(&stack);

    int i;

    for(i= 0; i < 4; i++)
        push(&stack, i);

    printf("pop1:%d\n",pop(&stack));
    push(&stack,21);
    for(i = 0; i < 4; i++)
        printf("pop%d:%d\n",i,pop(&stack));
}
发布了23 篇原创文章 · 获赞 27 · 访问量 1159

猜你喜欢

转载自blog.csdn.net/BLUCEJIE/article/details/103602388
今日推荐