在网上找到一些关于栈的文章,于是自己动手试着写了一下,不写不知道,原来自己基础这么薄弱....
-----------------------------------
一个简单栈操作的实现步骤
1.初始化
2.压栈操作,//push(stack s,object o)
3.出栈操作,
4.销毁栈内存
其他操作,获取栈的当前容量 清空栈,遍历栈。
---------------------
简单的实现代码
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *base;
int *top;
int stackSize;
} stack;
void initStack( stack * s, int size)
{
s->top = s->base = (int *) malloc (sizeof(int)* size);
if (s->base == NULL){
printf("申请内存失败\n");
exit(0);
}
s->stackSize = size;
}
int push(stack *s, int mem)
{
if (s->base - s->top == - s->stackSize){
s->base = (int *) realloc(s->base, (s->stackSize+10)*sizeof (int ));
s->top = s->base + s->stackSize;
s->stackSize += 10;
}
*(s->top) = mem;
s->top++;
return mem;
}
int pop(stack *s)
{
if (s->base == s->top ){
printf("栈空!\n");
return 0;
}
s->top --;
printf("%d ", *s->top);
return *s->top ;
}
void destroystack(stack *s)
{
free(s->base);
}
void main()
{
int size= 12;
stack s;
initStack(&s,10);
for (int i= 0; i< size; i++)
push(&s, i);
for (i = 0 ;i < size-1; i++)
pop(&s);
destroystack(&s);
}
-------------------------------------------------
可笑的是,在写的过程中,realloc函数的使用,我竟然忘了 *sizeof(int) 这一小部分了,也就是在增加内存的时候申请的空间小了,更搞笑的是,我花了一早上才意识到这个问题..........细节问题...........