3.2实现链栈的各种基本运算

程序结构:与exp3-1.cpp相同

程序代码:

listack.cpp

//链栈基本运算算法
#include <stdio.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;
		p=p->next;
	}
	free(s);	//s指向尾结点,释放其空间
}
bool StackEmpty(LinkStNode *s)
{
	return(s->next==NULL);
}
bool 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;
	return true;
}
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);				//释放p结点
	return true;
}
bool GetTop(LinkStNode *s,ElemType &e)
{	if (s->next==NULL)		//栈空的情况
		return false;
	e=s->next->data;
	return true;
}

exp3-2.cpp
#include"listack.cpp"
int main()
{	
	ElemType e;
	LinkStNode *s;
	char ch[5]={'a','b', 'c','d','e'};
	int i=0;
	int length =5;
	printf("\n");
	printf(" (1)初始化栈\n");
	InitStack(s);
	printf(" (2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (3)依次进栈元素a,b,c,d,e\n");
	while(i<length)
	{	Push(s,ch[i]);
		i++;
		}	
		
	printf(" (4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (5)出栈序列:");
	while(!(StackEmpty(s)))
	{
		Pop(s,e);
		printf(" %c ",e);
	}
	printf("\n");
	printf(" (6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (7)销毁栈\n");
	DestroyStack(s);
	
}


区别:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值