/*
链栈的相关操作。元素都从栈顶进出。
*/
# include <stdio.h>
# include <malloc.h>
# define BOOL int
# define TRUE 1
# define FALSE 0
# define INIT_SIZE 5 //链栈的初始大小
# define INCRE_SIZE 2 //链栈增加的增量
typedef struct
{
int * base; //栈底指针,也是指向栈空间的地址
int * top; //栈顶指针,始终指向有效元素的上一个位置,
int initsize; //栈的初始分配空间大小
}Stack;
Stack creat_stack(); //创建栈
void push(Stack &s, int i); //元素入栈
void pop(Stack &s, int * val); //元素出栈
int length_stack(Stack s); //求栈的长度
BOOL del(Stack &s); //销毁栈
int main(void)
{
//创建栈
Stack s = creat_stack();
int i;
int val;
int length;
printf("要入栈的元素的个数:length = ");
scanf("%d", &length);
//向栈中加入元素
for(i = 0; i < length; i++)
{
push(s, i);
}
printf("len = %d\n", length_stack(s));
//元素出栈
for(i = 0; i < length; i++)
{
pop(s, &val);
printf("%d ", val);
}
printf("出栈成功\n");
printf("len = %d\n", length_stack(s));
printf("栈销毁 = %d\n", del(s));
return 0;
}
//创建栈
Stack creat_stack()
{
Stack s;
s.initsize = INIT_SIZE;
s.base = (int *)malloc(sizeof(int) * INIT_SIZE); //栈分配空间
s.top = s.base;
return s;
}
//元素i入栈
void push(Stack &s, int i)
{
//判断栈满
if((s.top - s.base) >= s.initsize)
{
//增加栈空间
s.base = (int *)realloc(s.base, sizeof(int) *(s.initsize + INCRE_SIZE));
s.initsize = s.initsize + INCRE_SIZE;
}
*(s.top) = i;
s.top ++;
}
//元素出栈,保存在val中
void pop(Stack &s, int * val)
{
if(s.top == s.base)
{
printf("栈已空!");
return;
}
s.top --;
* val = *(s.top);
}
//求栈的长度
int length_stack(Stack s)
{
int len = 0;
return s.top - s.base;
}
//销毁栈
BOOL del(Stack &s)
{
s.initsize = 0;
s.top = NULL;
free(s.base);
s.base = NULL;
return TRUE;
}
C语言:顺序结构(数组)栈
最新推荐文章于 2024-01-29 22:23:37 发布