链栈基本操作

#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>

typedef char ElemType;
typedef struct linknode{
	ElemType data;		//数据域
	struct linknode *next;		//栈顶指针 
}LinkStNode;						

//初始化链栈
void InitStack(LinkStNode *&s){
	s = (LinkStNode *)malloc(sizeof(LinkStNode));
	s->next = NULL;
} 

//销毁链栈
void DestroyStack(LinkStNode *&s){
	LinkStNode *p = s->next; 	
	while(p != NULL){
		free(s);	//释放结点
		s = p;		//s、p向后遍历
		p = p->next; 
	}
	free(s);		//循环结束时,s指向尾结点
	
}

//判断栈是否为空
bool StackEmpty(LinkStNode *s){
	return (s->next == NULL);
} 

//进栈
void Push(LinkStNode *&s,ElemType e){
	LinkStNode *p;
	p = (LinkStNode *)malloc(sizeof(LinkStNode));
	p->data = e;		//新建元素e对应的结点p
	p->next = s->next;		//插入p结点作为开始结点
	s->next = p; 
} 

//出栈
bool Pop(LinkStNode *&s,ElemType &e){
	LinkStNode *p;
	if (s->next == NULL)		//栈空的情况
		return false;
	p = s->next;		//p指向开始结点
	e = p->data;
	s->next = p->next;		//删除p结点
	free(p);
	return true; 
} 

//取栈顶元素
bool GetTop(LinkStNode *s,ElemType &e){
	if(s ->next == NULL)
		return false;
	e = s->next->data;
	return true;
} 
	

	

测试文件

#include"listack.cpp"
int main(){
	ElemType e;
	LinkStNode *s;
	printf("1/初始化栈\n");
	InitStack(s);
	printf("栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("依次进栈元素为:1 2 3 4 5 \n");
	Push(s,1);
	Push(s,2);
	Push(s,3);
	Push(s,4);
	Push(s,5);
	printf("栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("出栈序列");
	while(!StackEmpty(s)){
		Pop(s,e);
		printf("%d",e);
	} 
	printf("/n");
	printf("释放栈\n");
	DestroyStack(s);
	return 1;
	 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值