#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;
}
}
栈
最新推荐文章于 2023-09-25 08:30:09 发布