#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>


typedef struct Node{
int data;
struct Node *Next;
}Node,*pNode;


typedef struct stack{
pNode pTop;
pNode pBottom;
}Stack,*pStack;


void init(pStack pS);                    //创建一个栈 
void push(pStack pS,int val);            // 压栈 
bool pop(pStack pS,int *val);            //出栈 
void traverse(pStack pS);                //遍历栈 
void clear(pStack pS);                   //清空栈 
bool empty(pStack pS);                   // 判空栈 


int main(void){
Stack pS;
int val;
int len;
init(&pS);
printf("请输入该栈元素的个数:");
scanf("%d",&len); 
push(&pS,len);
printf("遍历该栈的元素:"); 
traverse(&pS);
if(empty(&pS))
   printf("\n该栈为空!");
else
   printf("\n该栈非空!");
if(pop(&pS,&val))
  printf("\n出栈成功,且出栈的数为%d",val);
else 
  printf("\n出栈失败!"); 
printf("\n出栈后的序列:");
traverse(&pS);
printf("\n请输出清空后的栈的元素:");
clear(&pS);
    traverse(&pS);
}


void init(pStack pS){
pS->pTop=(pNode)malloc(sizeof(Node));
if(pS->pTop==NULL){
printf("动态内存分配失败!"); 
   exit(-1);
}
else
{
pS->pBottom=pS->pTop;
pS->pBottom->Next==NULL;
pS->pTop==NULL;
}



void push(pStack pS,int len){
int val;
for(int i=0;i<len;i++){
printf("请输入您要压栈的第%d个元素:",i+1);
scanf("%d",&val);
pNode pNew=(pNode)malloc(sizeof(Node));

pNew->data=val;
pNew->Next=pS->pTop;
pS->pTop=pNew;
}


return; 
}


void traverse(pStack pS){
pNode p=pS->pTop;
while(p!=pS->pBottom){
printf("%d ",p->data);
p=p->Next; 
}
return;
}


bool empty(pStack pS){
if(pS->pTop==pS->pBottom)
return true;
else 
return false;
}


void clear(pStack pS){
if(empty(pS))
{
printf("该链表为空链表!");
exit(-1);
}
else
{
pNode p=pS->pTop;
pNode q=NULL;

while(p!=pS->pBottom){
q=p->Next;
free (p);
p=q;
}
pS->pTop=pS->pBottom;
}

}


bool pop(pStack pS,int *val){
if(empty(pS)){
return false;

else 
{
pNode p=pS->pTop;
      *val=p->data;
      pS->pTop=p->Next;
      free(p);
      p=NULL;
      return true;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值