//栈的C语言实现(链表)
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct _NODE_{
struct _NODE_ *next;
int data;
}NODE;
typedef struct _STACK{
NODE *top;
}STACK;
//创建一个空栈
STACK *Create(){
STACK *stack;
stack=(STACK*)malloc(sizeof(STACK));
if(stack==NULL){
printf("创建失败!");
exit(-1);
}
else{
stack->top=NULL;
return stack;
}
}
//入栈,单链表的顶端来实现插入 ,链表的顶端做为栈顶
STACK *Push(STACK *stack,int element){
if(stack==NULL){
printf("需要先创建stack!");
exit(-1);
}
NODE *node;
node=(NODE*)malloc(sizeof(NODE));
node->data=element;
node->next=stack->top;
stack->top=node;
return stack;
}
//打印栈
void Printf(STACK *stack){
NODE *node;
if(stack->top==NULL){
printf("空栈!");
exit(-1);
}
else{
node=stack->top;
do{
printf(" %d ",node->data);
node=node->next;
}while(node!=NULL);
}
printf("\n");
}
//出栈
STACK *Pop(STACK *stack){
int x;
NODE *node;
if(stack==NULL||stack->top==NULL){
printf("空栈!");
}
else{
if(stack->top->next==NULL){
x=stack->top->data;
node=stack->top;
stack->top=NULL;
}
else{
node=stack->top;
stack->top=node->next;
free(node);
}
return stack;
}
}
int main(int argc, char *argv[]) {
STACK *stack=Create();
stack=Push(stack,1);
stack=Push(stack,2);
stack=Push(stack,3);
stack=Push(stack,4);
stack=Push(stack,5);
Printf(stack);
stack=Pop(stack);
Printf(stack);
return 0;
}
栈的C语言实现(链表)
最新推荐文章于 2022-08-25 10:25:50 发布