链栈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;
}
posted @ 2025-05-25 10:51  hardestnut  阅读(6)  评论(0)    收藏  举报