栈(二)链式栈

一.链式栈节点

1.栈节点的定义

#pragma once
#include<iostream>
class LinkNode
{
public:
	int data;
	LinkNode* next;
	LinkNode();//创建头节点
	LinkNode(int val);
};

 2.栈节点的初始化

#include "LinkNode.h"
LinkNode::LinkNode()
	:next(nullptr)
{

}
LinkNode::LinkNode(int val)
	:data(val), next(nullptr)
{

}

二.链式栈的接口

#pragma once
#include"LinkNode.h"
#include<iostream>
using namespace std;
class LinkedStack
{
public:
	LinkNode* top;
	int size;
public:
	LinkedStack();
	void push(int val);
	int pop();
	void print();
	bool isEmpty();
	int getSize();
	int getTop();
	int getTopIndex();
};

三.链式栈的基本操作

1.初始化

将栈顶指针设为空指针,栈长为0

LinkedStack::LinkedStack()
	:size(0)
{
	top = NULL;
}

2.入栈操作 

1.栈长自增

2.新元素的next指针指向栈顶

3.将新元素设为栈顶

4.时间复杂度为Θ(1)

void LinkedStack::push(int val)
{
	size++;
	LinkNode* temp = new LinkNode(val);
	temp->next = top;
	top = temp;
}

3.出栈操作

1.检验是否栈空

​2.栈长自减 ​

3.使用一个暂时指针保留栈顶元素

4.将暂时指针向后移动一位作为栈顶

5.删除暂时指针

6.返回之前保留的栈顶元素

int LinkedStack::pop()
{
	if (isEmpty())
		cout << "Empty,Stack" << endl;
	else
	{
		size--;
		LinkNode* temp = top;
		int val = temp->data;
		top = temp->next;
		delete temp;
		return val;
	}
}

 4.判空

初始化top=-null,判断top是否为空指针

bool LinkedStack::isEmpty()
{
	return top==nullptr;
}

5.计算栈长 

1.将栈顶指针看作数组下标为1

2.遍历链表直到链表的下一个节点为空节点

3.Temp = Temp->Next;等价于a++

int LinkedStack::getSize()
{
	int Size = 0;
	LinkNode* temp = top;
	while (temp)
	{
		Size++;
		temp = temp->next;
	}
	return Size;
}

6.打印栈

void LinkedStack::print()
{
	LinkNode* temp = top;
	int i = 1;
	while (temp)
	{
		cout << "第" << i << "个元素为:" << temp->data << endl;
		temp = temp->next;
		i++;
	}
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值