#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义顺序栈类型
typedef int DataType;
struct stack
{
int max;//栈最大容量
int top;//栈顶指针
DataType *elem;//elem动态分配内存后指向*elem数组起始地址
};
typedef struct stack *SeqStack;
//创建空栈
SeqStack SetNullStack_seq(int m)//m为指定的最大空间
{
SeqStack sstack=(SeqStack)malloc(sizeof(struct stack));
if(sstack->elem!=NULL)
{
sstack->elem=(int*)malloc(sizeof(int)*m);
if(sstack->elem!=NULL)
{
sstack->max=m;//最大容量m
sstack->top=-1;//栈顶初值-1
return(sstack);
}
else
{
free(sstack);
return NULL;
}
}
else
{
printf("alloc failure");
return NULL;
}
}
//判断栈空
int IsNullStack_seq(SeqStack sstack)
{
return(sstack->top==-1);//栈顶-1返回1,否则返回0
}
//进栈
void Push_seq(SeqStack sstack,int x)//x进栈
{
if(sstack->top>=sstack->max-1)//判断栈满
printf("overflow!\n");
else
{
sstack->top++;//栈顶上移
sstack->elem[sstack->top]=x;//将x置于栈顶
}
}
//出栈
void Pop_seq(SeqStack sstack)
{
if(IsNullStack_seq(sstack))//判断栈空
printf("underflow!\n");
else
sstack->top=sstack->top-1;//栈顶下移
}
//取栈顶元素
DataType Top_seq(SeqStack sstack)
{
if(IsNullStack_seq(sstack))//判断栈空
printf("empty!\n");
else
return sstack->elem[sstack->top];//返回栈顶元素
}
//打印顺序栈
void printstack(SeqStack sstack)
{
if (IsNullStack_seq(sstack))
printf("\n The stack is NULL ! \n");
else
{
for (int i = 0;i <=sstack->top;i++)
printf("%d ",sstack->elem[i]);
}
printf("\n");
}
//主函数
int main()
{
int m=10;//定义栈容量
SeqStack stack1=SetNullStack_seq(m);//创空栈stack1
Push_seq(stack1,5);//5,8,9依次进栈
Push_seq(stack1,8);
Push_seq(stack1,9);
printstack(stack1);
Pop_seq(stack1);//一次出栈(出栈栈顶元素)
printstack(stack1);
printf("栈顶元素:%d\n",Top_seq(stack1));//求栈顶元素值
system("pause");
}
数据结构—顺序栈
最新推荐文章于 2024-08-23 08:14:22 发布