数据结构利用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));
}