# 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;
bool init(PSTACK);//初始化一个栈
bool push(PSTACK,int);//压栈
void traverse(PSTACK);//遍历
bool is_empty(PSTACK);//判断栈是否为空
bool pop(PSTACK,int *);//出栈
bool clear(PSTACK);//清空栈
int main(void)
{
STACK s;
int val;
init(&s);
push(&s,32);
push(&s,12);
push(&s,67);
push(&s,89);
push(&s,19);
push(&s,105);
push(&s,77);
traverse(&s);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
pop(&s,&val);
traverse(&s);
clear(&s);
push(&s,32);
push(&s,12);
push(&s,67);
push(&s,89);
clear(&s);
traverse(&s);
return 0;
}
bool init(PSTACK ps)//初始化一个栈
{
PNODE pn = (PNODE)malloc(sizeof(NODE));
if(pn==NULL)
{
printf("栈初始化失败。\n");
return false;
}
pn->pnext = NULL;
ps->pbottom = pn;
ps->ptop = pn;
return true;
}
bool push(PSTACK ps,int val)//压栈
{
PNODE pt = (PNODE)malloc(sizeof(NODE));
if(NULL!=pt)
{
pt->data = val;
pt->pnext = ps->ptop;
ps->ptop = pt;
return true;
}
printf("压栈失败。\n");
return false;
}
void traverse(PSTACK ps)//遍历
{
if(is_empty(ps))
{
printf("栈为空。\n");
return;
}
PNODE pn;
for(pn=ps->ptop;pn->pnext!=NULL;pn=pn->pnext)
{
printf("%d\t",pn->data);
}
printf("\n");
}
bool is_empty(PSTACK ps)//判断栈是否为空
{
if(ps->pbottom==ps->ptop || ps==NULL || ps->pbottom==NULL || ps->ptop==NULL) return true;
return false;
}
bool pop(PSTACK ps,int * pop_val)//出栈
{
if(is_empty(ps))
{
printf("栈为空。\n");
return false;
}
PNODE pn = ps->ptop;
*pop_val = pn->data;
ps->ptop = pn->pnext;
printf("出栈成功,出栈值为%d。\n",*pop_val);
free(pn);
return true;
}
bool clear(PSTACK ps)//清空栈
{
if(is_empty(ps))
{
printf("栈为空,不需要执行此操作。\n");
return false;
}
PNODE ph = ps->ptop,pt = ps->ptop->pnext;
ps->ptop = ps->pbottom;
while(ph->pnext!=NULL)
{
free(ph);
ph = pt;
pt = pt->pnext;
}
printf("清空栈成功。\n");
return true;
}
栈模拟 数据结构 C语言
最新推荐文章于 2022-07-01 14:24:53 发布