9.考研-数据结构-链栈的基本操作(带头结点)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}


猜你喜欢

转载自blog.csdn.net/Suyebiubiu/article/details/80517960
今日推荐