版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Suyebiubiu/article/details/80517960
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
/*
链栈:
两个特殊状态:
1.栈空的状态:lst.next=NULL
2.栈满的状态 可以认为无限大
两个操作:
1.入栈:(头插法建立链表插入操作)
p->next=lst->next;
lst->next=p;
2.出栈(就是单链表的删除操作)
p=lst->next;
x=p->data;
lst->next=p->next;
free(p);
*/
#include "stdafx.h"
#include<iostream>
using namespace std;
//链栈的结点定义
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Stack;
//1.初始化一个链栈
void initStack(Stack stack) {//stack会改变,用引用型
stack = (Lnode*)malloc(sizeof(Lnode));//制造一个新的头结点
stack->next = NULL;
}
//2.判断栈空的代码
int isEmpty(Stack stack) {
if (stack->next==NULL) {
return 1;
}
else {
return 0;
}
}
//3.进栈的代码
void push(Stack stack ,int x) {
Stack p;
p = (Lnode*)malloc(sizeof(Lnode));//为进栈元素申请空间
p->next = NULL;//这一句可以不写,但是为了良好的代码习惯,建议加上
/* 以下三句就是单链表的头插法 */
p->data = x;
p->next = stack->next;
stack->next = p;//让头结点重新指向新加入的元素
}
//4.出栈的代码
int pop(Stack stack) {
Stack p;
int x;
if (stack->next==NULL) {
return 0;
}
/*以下就是单链表的删除操作*/
p = stack->next;
x = p->data;
stack->next = p->next;
//free(p);
return x;
}
int main()
{
Stack stack=(Lnode*)malloc(sizeof(Lnode));//制造一个新的头结点
stack->next = NULL;
//初始化一个链栈
//initStack(stack);
push(stack, 1);
push(stack, 2);
int ans = pop(stack);
cout << ans << endl;
int ans2 = pop(stack);
cout << ans2 << endl;
int f;
cin >> f;
return 0;
}