栈的顺序存储结构c语言,C语言 数据结构 栈和队列 顺序栈(栈的顺序存储结构)...

#include #define STACK_INIT_SIZE      100 //初始化分配大小

#define STACK_INCREMENT_SIZE 10 //增加分配大小

typedef  int  ElemType;

typedef struct{

ElemType  *base;    //栈底指针(存储空间首地址)

ElemType  *top;     //栈顶指针

int       stacksize;//顺序存储空间的大小

}OrderStack;

int  InitStack(OrderStack &s);//初始化栈(构建一个空栈)

int  Pop(OrderStack &s);//出栈(删除栈顶元素)

void Traverse(OrderStack &s);//迭代栈

int  GetTop(OrderStack s);//获取栈顶元素

int  Push(OrderStack &s,ElemType &e);//入栈

//初始化栈(构建一个空栈)

int InitStack(OrderStack &s){

s.base=(ElemType*)malloc(10);

if (!s.base)

exit(0);//存储分配失败

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

return 1;

}

//获取栈顶元素

int GetTop(OrderStack s){

ElemType e;

if (s.top==s.base){

return FALSE;

}else{

e=*(s.top-1);

}

return e;

}

//入栈

int Push(OrderStack &s,ElemType &e){

if ((s.top-s.base)>=s.stacksize){

s.base=(ElemType *)realloc(s.base,(s.stacksize+STACK_INCREMENT_SIZE)*sizeof(ElemType));

if (!s.base){

return false;

}

s.top=s.base+s.stacksize;

s.stacksize=s.stacksize+STACK_INCREMENT_SIZE;

printf("%-6顺序栈长度不足!!!开始扩充元素--> %d\n",s.stacksize);

}

*s.top=e;

s.top++;

return 1;

}

//出栈(删除栈顶元素)

int Pop(OrderStack &s){

ElemType e;

if (s.top==s.base){

return 0;

}else{

s.top--;

e=*s.top;

return e;

}

}

//迭代栈

void Traverse(OrderStack &s){

if (s.top==s.base){

} else{

ElemType *traverse=s.top;

while (traverse>s.base){

traverse--;

printf("%d\n",*traverse);

}

}

}

int main(){

OrderStack s;

InitStack(s);

for (int i=1;i<=10;i++){

//*s.top=i;

//++s.top;

Push(s,i);//入栈

printf("获取栈顶元素 %d\n",GetTop(s));

}

printf("---------------入栈---------------\n");

int k=100;

int m=200;

Push(s,k);//入栈

printf("获取栈顶元素 %d\n",GetTop(s));

Push(s,m);//入栈

printf("获取栈顶元素 %d\n",GetTop(s));

printf("---------------出栈---------------\n");

printf("获取出栈元素 %d\n",Pop(s));

printf("获取出栈元素 %d\n",Pop(s));

printf("获取出栈元素 %d\n",Pop(s));

printf("获取出栈元素 %d\n",Pop(s));

printf("---------------迭代---------------\n");

Traverse(s);

system("pause");

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值