C语言栈的演示(入栈,弹栈,遍历)

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

typedef struct Node
{
    int data;
struct Node * pNext;
}NODE,* PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, * PSTACK;

void init(PSTACK);//初始化栈 
void push(PSTACK,int);// 入栈 
void traverse(PSTACK);//遍历 
bool empty(PSTACK);//是否为空 
bool pop(PSTACK,int *);//弹栈 
void clear(PSTACK);//清空栈 

int main(void)
{
STACK S;
int val;

init(&S);
push(&S,1);
push(&S,2);
    push(&S,3);
    push(&S,4);
    traverse(&S);

    if(pop(&S,&val)){
    printf("弹栈成功,弹出的数据是%d\n",val);
    }else{
    printf("弹栈失败!");
    }
    clear(&S);
    traverse(&S);
    return 0;
}
//初始化栈 
void init(PSTACK pS)
{
 pS->pTop=(PNODE)malloc(sizeof(NODE));
 if(pS->pTop==NULL){
 printf(" 动态内存分配失败!\n");
 exit(-1);
 }else{
 pS->pBottom=pS->pTop;
 pS->pTop->pNext=NULL; 
 }
}
//入栈 
void push(PSTACK pS,int value)
{
   PNODE pNew=(PNODE)malloc(sizeof(NODE));

   pNew->data=value;
   pNew->pNext=pS->pTop;
   pS->pTop=pNew;

   return;
}
//遍历 
void traverse(PSTACK pS)
{
PNODE P=pS->pTop;
while(P !=pS->pBottom)
{
printf("%d ",P->data);
P=P->pNext;
}
printf("\n");
return;
}

//判断栈是否为空
bool empty(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
{
return true;
}else{
return false;
}
} 
//弹栈 
bool pop(PSTACK pS,int * val)
{
    if(empty(pS))
{
return false;
}else
{
PNODE R=pS->pTop;
pS->pTop=pS->pTop->pNext;
*val=R->data;
free(R);
R=NULL; 

    return true;
}
}

//清空栈中数据
 void clear(PSTACK pS)
 {
 if(empty(pS)){
 return;
 }else{
   PNODE p=pS->pTop;
  PNODE q=NULL;
  while(p!=pS->pBottom)
  {
  q=p->pNext;
  free(p);
  p=q;
    }
pS->pTop=pS->pBottom;
 }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值