您的位置:首页 > 理论基础 > 数据结构算法

数据结构之栈和队列---栈的基本操作

2015-08-03 16:47 405 查看
问题:实现栈的基本操作,内容包括栈的结构体,栈的初始化,栈的销毁,进栈操作及出栈操作

//结构体

typedef struct MyStack
{
ElemType *top;
ElemType *base;
int stacksize;
}MyStack;//栈的初始化
MyStack* InitStack()
{
MyStack *stack;
stack = (MyStack *)malloc(sizeof(MyStack));
stack->stacksize = INIT_SIZE;
stack->base = (ElemType *)malloc(sizeof(ElemType)*INIT_SIZE);
stack->top = stack->base;

return stack;
}//栈的销毁
void DestroyStack(MyStack *stack)
{
if(stack!=NULL)
{
free(stack->base);
free(stack);
}
}
//进栈操作
//本文中栈使用顺序存储结构实现,因此判断栈满时直接使用栈顶减去栈底进行判断

//但是比较时要注意元素类型所占空间,

//例如double型变量需要用栈的大小乘上8(即double类型变量的大小)
int PushStack(MyStack *stack, ElemType elem)
{
if(stack->top-stack->base>=stack->stacksize*sizeof(ElemType))
{
printf("栈已满,无法添加新元素\n");
return -1;
}
*stack->top = elem;
++ stack->top;

return 0;
}//出栈操作
//出栈主要注意top指向的是当前元素位置,还是下一个元素位置

int PopStack(MyStack *stack, ElemType *elem)
{
if(stack->top==stack->base)
{
printf("栈中没有元素\n");
return -1;
}
*elem = *(--stack->top);
return 0;
}
很久不用C语言编程了,编程时遇到这样一个情况,
在编写纯C语言时,函数中是不能使用引用参数的,只能使用指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息