栈的链表简易实现
栈的特点:后入先出,只能从栈顶往栈底一个一个压,取的时候也只能从栈顶一个一个取出来;
下面是简易的实现:
#include<stdlib.h> #include<stdio.h> #include<malloc.h> #define NODE_SIZE sizeof(struct Node) typedef int Number; typedef struct Node * Stack; struct Node{ Number data; Stack next; }; Stack distribute() { Stack sta = (Stack)malloc(NODE_SIZE); if(sta == NULL) { printf("资源分配失败!"); exit(-1); } return sta; } Stack init() { Stack s = distribute(); s->data = -1; s->next=NULL; return s; } void push(Stack sta,Number num) { Stack s = distribute(); s->next=sta; s->data=num; sta = s; } Number pop(Stack sta) //取出栈顶的值 {
if(sta->next!=NULL)
{ Stack s = sta->next; sta->next=sta->next->next; return s->data;
}
printf("栈为空"); exit(-1);
} Number get(Stack sta) //查看栈顶元素的值 不取出 { if(sta->next!=NULL){ return sta->next->data; } printf("栈为空"); exit(-1); } void print(Stack sta) { sta=sta->next; while(sta->next != NULL){ printf("%d ",sta->data); sta = sta->next; } } void main() { Stack sta = init(); push(sta,1); push(sta,3); print(sta); }