#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;
}
C++ 实现链栈
最新推荐文章于 2024-09-30 18:37:43 发布