数据结构与算法--用单向链表实现栈(C++实现)

本文介绍了如何使用C++通过单向链表实现栈,探讨了栈的基本操作如入栈和出栈,并提供了具体的算法描述、类定义以及程序清单。文章还强调了在指针操作中防止野指针和空指针操作的重要性。
摘要由CSDN通过智能技术生成

前言

栈是基本的数据结构。其特点是添加和删除(访问)数据都在线性表的一端(头端)。数据访问遵循后进先出(LIFO)的原则。栈一般用数组或者链表来实现。数组需要静态分配数据空间,占用空间比较大。链表则根据实际需要动态分配数据空间,占用空间相对小一些。本文用单向链表实现栈。程序用C++实现。本文是C++、数据结构及算法学习的一个小小练习。供大家参考。

栈的操作

栈的操作主要就两个:入栈(push)和出栈(pop)。顾名思义,入栈就是将数据压入栈中保存;出栈就是将数据弹出栈,同时访问数据。

数据结构和算法描述

节点的结构

节点(Node)分为两部分,数据和链接部分。数据部分存储数据,可以根据实际情况分为若干字段。本文数据部分分两个字段:key和data。链接部分就是一个指针,指向下一个节点。然后让头指针指向第一个节点,这样一个链式的栈就形成了。C++代码如下:

struct Node {
   
	int key;
	string data;
	Node *next=nullptr;
}

C++的结构允许有自己的构造函数,我们将上面的节点结构改写一下,包含构造函数:

struct Node {
   
	int key;
	string data;
	Node *next=nullptr;
	Node(int ky, string da, Node *nxt=nullptr) : key(ky), data(da), next(nxt) {
   };
}

算法描述

入栈和出栈的算法比较简单,直接用C++描述如下。

push(int ky, string da)
{
   
	head=new Node(ky,da,head);
	return;
}

pop(int &ky, string &da)
{
   
	Node *p;
	p=head;
	if (nullptr!=head) {
   
		ky=key;
		da=data;
		head=head->next;
		delete p;
	}	
	return;
}

类的定义

栈定义成一个类,其上定义了构造函数、析构函数、入栈(push)、出栈(pop)、判断空栈函数(isEmpty())以及指向链表头节点的指针head。C++代码如下:

class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值