#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node{
int data;
struct Node *next;
}NODE,*PNODE;
typedef struct Stack{
PNODE top;
PNODE bottom;
}STACK,*PSTACK;
void init(PSTACK ps);
void push(PSTACK ps,int data);
void list(PSTACK ps);
bool pop(PSTACK ps,int *val);
bool empty(PSTACK ps);
int main(){
STACK S;
int val;
init(&S);
push(&S,1);
push(&S,2);
push(&S,3);
push(&S,4);
push(&S,5);
list(&S);
if(pop(&S,&val)){
printf("出栈的值为:%d\n",val);
printf("出栈队列后:\n");
}
list(&S);
return 0;
}
void init(PSTACK ps){
ps->top=(PNODE)malloc(sizeof(NODE));
if(ps->top==NULL){
printf("动态内存分配失败!");
exit(-1);
}
else{
ps->bottom=ps->top;
}
}
void push(PSTACK ps,int data)
{
PNODE p=(PNODE)malloc(sizeof(NODE));//入栈需要动态分配一个结点
p->data=data;
p->next=ps->top;
ps->top=p;
}
void list(PSTACK ps)
{
PNODE p=ps->top;//遍历不需要动态态分配一个结点
while(p!=ps->bottom)
{
printf("%d ",p->data); //注意易错点,遍历的时候改变的是p ,top不能变!!
p=p->next;
}
printf("\n");
}
bool pop(PSTACK ps,int *val)
{
if(empty(ps))
{
printf("出栈失败!\n");
return false;
}
else{
PNODE p=ps->top;
ps->top=p->next;
*val=p->data;
free(p);
p=NULL;
return true;
}
}
bool empty(PSTACK ps){
if(ps->top==ps->bottom){
return true;
}
else return false;
}
数据结构——栈
最新推荐文章于 2023-09-27 23:58:19 发布