C++ 实现链栈

#include <stdio.h>  
#include <string>  
#include <stdlib.h>  
#include <iostream>  
#include <stack>  
using namespace std;

/*
Created by HarvestWu on 2018/5/7.
*/
//链栈定义
typedef struct LNode{
	int data;			//数据域
	struct LNode *next;	        //指针域
}LNode;					//链栈结点定义

//链栈初始化  
void initStack(LNode *&lst);
//链栈判空  
int isEmpty(LNode *lst);
//链栈进栈  
void push(LNode *lst, int x);
//链栈出栈  
int pop(LNode *lst, int &x);

int main()
{
	LNode *lst;
	int x;
	initStack(lst);
	if (isEmpty(lst))
		printf("栈空\n");
	else printf("栈非空\n");

	push(lst, 5);
	push(lst, 55);
	printf("入栈成功\n");
	if (isEmpty(lst))
		printf("栈空\n");
	else printf("栈非空\n");

	if (pop(lst, x))
		printf("出栈成功,出栈元素为:%d\n", x);
	else printf("栈空,不能出栈\n");
	if (pop(lst, x))
		printf("出栈成功,出栈元素为:%d\n", x);
	else printf("栈空,不能出栈\n");
	if (pop(lst, x))
		printf("出栈成功,出栈元素为:%d\n", x);
	else printf("栈空,不能出栈\n");
	return 0;
	return 0;
}


//链栈初始化  
void initStack(LNode *&lst)
{
	lst = (LNode*)malloc(sizeof(LNode));	//构建一个头结点
	lst->next = NULL;
}

//链栈判空  
int isEmpty(LNode *lst)
{
	if (lst->next == NULL)//判断是否为空
		return 1;
	else return 0;
}

//链栈进栈  
void push(LNode *lst, int x)
{
	LNode *p;
	p = (LNode*)malloc(sizeof(LNode)); //申请空间给当前进栈元素
	/*采用链表的头插法“入栈”*/
	p->data = x;
	p->next = lst->next;
	lst->next = p;
}
//链栈出栈  
int pop(LNode *lst, int &x)
{
	LNode *p;
	if (lst->next == NULL) //栈空不能出栈
		return 0;
	/*出栈,即链表删除操作*/
	p = lst->next;
	x = p->data;
	lst->next = p->next;
	free(p);
	return 1;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值