#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct LiStack{
LinkNode *top;
int size;
}LiStack;
void InitStack(LiStack *q){//初始化栈
q->top=NULL;
q->size=0;
}
void Push(LiStack *q){ //进栈
ElemType x;
printf("请依次输入你要进栈的元素:");
scanf("%d",&x);
while(x!=9999){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=q->top;
q->top=s;
q->size++;
scanf("%d",&x);
}
}
void PrintStack_Push(LiStack q){ //自顶向下打印进栈后的元素
LinkNode *s;
if(q.size==0){
printf("栈中无数据");
}
printf("进栈自顶向下输出栈的所有元素:");
for(s=q.top;s;s=s->next){
printf("%5d",s->data);
}
printf("\n");
}
void Pop(LiStack *q,int i){ //出栈
ElemType x;
printf("您出栈的元素自顶向下为:");
for(int j=0;j<i;j++){
if(q->size==0){
printf("栈中已经没有元素!\n");
break;
}
LinkNode *temp=q->top;
x=q->top->data;
printf("%5d",x);
q->top=q->top->next;
q->size--;
free(temp);
}
printf("\n");
}
void PrintStack_Pop(LiStack q){ //自顶向下打印出栈后的所有元素
LinkNode *s;
if(q.size==0){
printf("栈中无数据");
}
printf("出栈后自顶向下输出栈的所有元素:");
for(s=q.top;s;s=s->next){
printf("%5d",s->data);
}
printf("\n");
}
int main(){
LiStack q;
InitStack(&q);
Push(&q);
PrintStack_Push(q);
Pop(&q,3);
PrintStack_Pop(q);
}
C语言栈的链式结构操作
最新推荐文章于 2023-05-20 08:56:02 发布