今天学习了栈的顺序存储结构,基本操作与线性表类似,较为简单,未遇到难以解决的问题,但在处理数组的时候还需细心!!!代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define maxsize 10//定义最大存储空间,此处造成了顺序栈的一个缺陷,无法自动调整空间,正在研究如何解决。
typedef int elemtype;
typedef int status;
//定义栈
typedef struct sqstack{
elemtype data[maxsize];
elemtype top;
}sqstack;
//遍历栈
status traversestack(sqstack *s){
int i=0;
for(i=s->top;i>=0;i--){
printf("%d ",s->data[i]);
}
printf("\n");
}
//置空栈(初始化或清空时使用)
status initstack(sqstack *s){
s->top=-1;//置空栈
}
//将元素压入栈
status push(sqstack *s,elemtype data)
{
if(s->top==maxsize-1){
return ERROR;//判断栈是否已满
}
else{
s->top++;
s->data[s->top]=data;
}
return OK;
}
//判断是否为空栈
status emptystack(sqstack *s){
if(s->top==-1){
return TRUE;
}
else{
return FALSE;
}
}
//出栈并返回元素值
status pop(sqstack *s){
elemtype e;
e=s->data[s->top];
s->top--;
return e;
}
//返回栈长
status stacklength (sqstack *s){
return s->top+1;
}
int main(void){
sqstack s;
elemtype i=0;
initstack(&s);
for(i=0;i<9;i++)
push(&s,i);
traversestack(&s);
//initstack(&s);
if(emptystack(&s)){
printf("空栈\n");
}
else{
printf("非空\n");
}
int e;
printf("%d \n",pop(&s));
traversestack(&s);
printf("栈长为%d",stacklength(&s));
}