数据结构——链栈和顺序栈的基本操作(C语言)
栈
对于栈,也是线性表的一种,其特点是先进后入或者后进先出,就如同在手枪弹夹里装子弹一样。只能在栈顶部删除或者插入。
栈分为__链栈__和__顺序栈__。
顺序栈的基本操作:
//顺序栈
//结构体类型
#define MAXSIZE 10
typedef int stackDataType;
typedef struct stackNode {
stackDataType* top;
stackDataType* base;
stackDataType maxSize;
}stackNode;
//增--入栈
void stackPush(stackNode* s,stackDataType x);
//删
//出栈
void stackPop(stackNode* s);
//初始化
void InitStack(stackNode* s);
//打印
void stackPrint(stackNode* s);
//获取栈顶的数据。
stackDataType getTop(stackNode* s);
//销毁栈
void destroyStack(stackNode* s);
//清空
void clearStack(stackNode*
入栈----------
// 入栈
void stackPush(stackNode* s, stackDataType x)
{
if (s->top - s->base == s->maxSize)
{
printf("栈已经满了\n");
return ;
}
*(s->top)=x;
s->top++;
}
出栈------------
//
void stackPop(stackNode* s)
{
if (s->top == s->base)
{
printf("栈为空\n");
return ;
}
*(s->top)=0;
s->top--;
}
对于栈的初始化---------------------
void InitStack(stackNode* s)
{
s->base=(stackDataType*)malloc(sizeof(stackDataType)*MAXSIZE);
if(s->base==NULL)
return ;
s->maxSize=MAXSIZE;
s->top=s->base;
}
获取栈的数据—————
stackDataType getTop(stackNode* s)
{
if (s->base != s->top)
{
return *(s->top-1);
}
}
打印
void stackPrint(stackNode* s)
{
int* head=s->top;
while(s->base!=s->top)
{
s->top--;
printf("%d ", *(s->top));
printf("\n");
}
s->top=head; //打印结束后top指向栈底,修改使其继续指向栈顶
return ;
}
获取栈顶元素`。-——————
//取栈顶元素
stackDataType getTop(stackNode* s)
{
if (s->base != s->top)
{
return *(s->top-1);
}
}
销毁和清空栈:
//销毁栈
void destroyStack(stackNode* s)
{
clearStack(s);
free(s->base);
return ;
}
//清空栈
void clearStack(stackNode* s)
{
s->top =s->base;
return ;
}
测试接口:-------
void test()
{
stackNode s;
InitStack(&s);
stackPush(&s,0);
stackPush(&s, 1);
stackPush(&s, 2);
stackPush(&s, 3);
stackPush(&s, 4);
stackPop(&s);
stackPrint(&s);
int x= getTop(&s);
printf("%d",x);
clearStack(&s);
destroyStack(& s);
}