//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储
//先学习顺序存储
//1、
#include<stdio.h>
#include<stdlib.h>
#define null NULL
#define SIZE 100
typedef int dataType ;
typedef struct
{
dataType data[SIZE];
int top;
}cStack,*cStackPointer;
//初始化栈空间
void
initStack(cStackPointer *A);
//销毁栈空间
void
destroyStack(cStackPointer *A);
//判断栈是否为空
int
isEmpty(cStackPointer A);
//入栈,e是需要入栈的元素
int
pushStack(cStackPointer A,dataType e);
//出栈,e指向了出栈的元素
int
popStack(cStackPointer A,dataType *e);
//查询top栈顶元素,e指向查询的结果元素,这个函数跟出栈函数的区别就是,查询只是查询,实际并没有出栈!
int
getTopElement(cStackPointer A,dataType *e);
//列出如果栈内元素全部出栈的出栈顺序
void
displayPop(cStackPointer A);
int
main()
{
//声明指针栈变量
cStackPointer A ;
int i;
printf("hello world !\n\n\n");
//初始化栈A
initStack(&A);
//入栈
for(i=0;i<=10;i++)
pushStack(A,i);
//打印全部元素的出栈顺序,只是打印,并没有真正出栈
displayPop(A);
//出栈操作
popStack(A,&i);
putchar(‘\n‘);
//打印全部元素的出栈顺序,只是打印,并没有真正出栈
displayPop(A);
printf("\n\n任意键结束程序\n\n");
getchar();
return 0;
}
void
initStack(cStackPointer *A)
{
if( ((*A) =(cStackPointer)malloc(sizeof(cStack))) ==null )
printf("内存不足!\n");
else
{
printf("初始化栈成功!\n");
(*A)->top = -1;
}
}
void
destroyStack(cStackPointer *A)
{
if(*A==null)
{
printf("栈不存在,销毁失败!\n");
return ;
}
else
{
free(*A);
*A = null;
}
}
int
isEmpty(cStackPointer A)
{
if(A->top==-1)
return 1;
else
return 0;
}
int
pushStack(cStackPointer A,dataType e)
{
if(A->top==SIZE-1)
{
printf("栈已经满了,入栈失败!\n");
return -1;
}
else
{
A->top++;
A->data[A->top]=e;
return 0;
}
}
int
popStack(cStackPointer A,dataType *e)
{
if(A->top==-1)
{
printf("栈是空的,出栈失败!\n");
return -1;
}
else
{
//这一步的意思是,把出栈的元素保存起来,如果需要的话,就可使用它
*e = A->data[A->top];
A->top--;
return 0;
}
}
int
getTopElement(cStackPointer A,dataType *e)
{
if(A->top==-1)
{
printf("栈是空的,取top元素失败!\n");
return -1;
}
else
{
//A->top--;//由于是查询操作,所以不用出栈!
*e = A->data[A->top];
return 0;
}
}
void
displayPop(cStackPointer A)
{
if(A->top==-1)
{
printf("栈是空的,输出栈为空!\n");
return ;
}
else
{
int i;
for(i=A->top;i>=0;i--)
{
printf("%d",A->data[i]);
if(i==0)
break;
else printf("->");
}
}
}一步一步学习数据结构(三)栈的顺序存储结构实现代码,布布扣,bubuko.com
原文地址:http://blog.csdn.net/jw_45840/article/details/24916163