栈
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOAW -1
#define LENGTH 5
typedef struct stack
{
int* element;
int size;
int top;
}stack;
typedef int status;
typedef int elemtype;
//初始化栈
status initialStack(stack& s, int size)
{
s.element = (elemtype*)malloc(size * sizeof(elemtype));
if (s.element == NULL)
{
printf("OVERFLOAW"); //内存区满申请内存失败
return OVERFLOAW;
}
s.top = 0;
s.size = size;
return OK;
}
//销毁栈
status destoryStack(stack& s)
{
free(s.element);
s.element = NULL;
return OK;
}
//判断是否为空
status isEmpty(stack& s)
{
if (s.top == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
//清空栈
void clearStack(stack& s)
{
if (s.top == 0)
{
return;
}
s.top = 0;
s.size = 0;
}
//元素进栈
status pushStack(stack& s, elemtype e)
{
if (s.top >= s.size)
{
elemtype* newbase;
newbase = (elemtype*)realloc(s.element,(s.size + 1) * sizeof(elemtype));
if (!newbase) {
printf("OVERFLOW");
return OVERFLOAW;
}
s.element = newbase;
s.size++;
}
s.element[s.top++] = e;
return OK;
}
//取栈顶的元素并返回
elemtype getTop(stack& s,elemtype &e)
{
if (0 == s.top)
{
return ERROR;
}
e = s.element[s.top - 1];
return e;
}
//出栈并返回
status popStack(stack& s, elemtype& e) {
if (0 == s.top)
{
return ERROR;
}
e = s.element[--s.top];
return e;
}
int main()
{
stack s;
int size,i;
elemtype e, eArray[LENGTH] = { 1,2,3,4,5 };
size = LENGTH;
printf("待测试元素为\n");
for ( i = 0; i < LENGTH; i++)
{
printf("%d\n", eArray[i]);
}
printf("\n");
if (!initialStack(s,size))
{
printf("初始化栈失败\n");
exit(0);
}
printf("已初始化顺序栈\n");
//入栈
for (i = 0; i < s.size; i++)
{
if (!pushStack(s, eArray[i]))
{
printf("%d入栈失败\n", eArray[i]);
exit(0);
}
}
printf("已入栈\n");
//取栈顶的元素
printf("栈顶元素为%d", getTop(s, e));
//栈顶出栈
printf("出栈元素为\n");
for (i = 0; i < s.size; i++)
{
printf("%d\t", popStack(s, e));
}
printf("\n");
clearStack(s);
printf("已清空栈\n");
return 0;
}
根据top的位置来确定栈顶,通过改变top的位置来定位栈顶;
下面是实现结果
待测试元素为
1
2
3
4
5
已初始化顺序栈
已入栈
栈顶元素为5出栈元素为
5 4 3 2 1
已清空栈