链栈c
这个数据结构类似链表,需要自己创建一个头s(栈顶)
后面创建的最新节点将成为新的s栈顶,然后新节点指向老节点即可
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
//这里后面的LinkStack相当于StackNode*
//初始化为空指针即可
int initstack(LinkStack *s);
//为入栈元素e分配空间,用指针p指向.
//将新结点数据域置为e。
//将新结点插入栈顶。
//修改栈顶指针为p。
int push(LinkStack *s,ElemType e);
//判断栈是否为空,若空则返回0
// 将栈顶元素赋给 e,新节点指向旧节点。
// 修改栈顶指针,指向新的栈顶元素。
// 释放原栈顶元素的空间。
int pop(LinkStack *s,ElemType *e);
ElemType getnum(LinkStack s);
int main(){
LinkStack s;
initstack(&s);
push(&s,1);
push(&s,2);
push(&s,3);
ElemType pop_num;
pop(&s,&pop_num);
printf("%d\n",getnum(s));
printf("%d\n",pop_num);
}
int initstack(LinkStack *s){
*s=NULL;
return 1;
}
int pop(LinkStack *s,ElemType *e){
if(!(*s))return 0;
*e=(*s)->data;
StackNode * p=(*s);
(*s)=(*s)->next;
free(p);
return 1;
}
int push(LinkStack *s,ElemType e){
StackNode *p=malloc(sizeof(StackNode));
if(!p)return 0;
p->data=e;
p->next=(*s);
*s=p;
return 1;
}
ElemType getnum(LinkStack s){
int t=s->data;
if(s) return s->data;
}

浙公网安备 33010602011771号