1:利用C++ 实现Stack有两种有两种方案:
一是用链表 二是用数组。
#include <iostream>
using namespace std;
typedef int T;
//链表类
class LinkedList
{
struct Node
{
T data;
Node* next;
//初始化data next 阻止垃圾数据
Node(const T& t=T()):data(t),next(NULL)
{
}
};
public:
//构造 析构 清空
LinkedList():head(NULL)
{
}
~LinkedList()
{
clear();
}
void clear()
{
Node *p=head;
while (p!=NULL)
{
Node *q = p->next;
delete p;//释放p所在空间
p=q;
}
}
//判断empty 求size 遍历(travel)
bool empty()
{
//判断头指针是否为空 为空表示链表不存在
return head==NULL ? true : false;
}
unsigned int size()
{
unsigned int size=0;
Node* p =head;
while (p!=NULL)
{
size++;
p=p->next;
}
return size;
}
void travel()
{
//利用while循环一次次的输出来,直到指针为NULL结束
Node* p = head;
while (p!=NULL)
{
cout<<p->data<<endl;
p=p->next;
}
}
//增(insertAfter insertFront)删改查(find)
void insertFront(const T& t)
{
Node* p = new Node(t);
p->next=head; //讲头指针所指向的地址给p的next
head = p; //让*p作为头
}
void insertAfter(const T& t)
{
Node *p = new Node(t);
Node *tail = getPointer(size()-1);
tail->next = p;
}
void erase(const T& t)
{
unsigned int position = find(t);
Node* cur = getPointer(position);
if (position!=0)
{
Node* pre = getPointer(find(t)-1);
pre->next = cur->next;
}else{
head = cur->next;
}
delete cur;
}
void update(const T& t,const T& target)
{
Node *p=getPointer(find(target));
p->data=t;
}
unsigned int find(const T& t)
{
unsigned int position=0;
Node* p = head;
while(p!=NULL)
{
if (p->data==t)
{
return position;
}
p=p->next;
position++;
}
return position;
}
//取头 取尾
T getHead()
{
return head->data;
}
T getTail()
{
Node *p=getPointer(this->size()-1);
return p->data;
}
//去指定位置取指针 辅助作用
Node* getPointer(int position)
{
Node* p =head;
for(int i = 0;i<position;i++)
{
p=p->next;
}
return p;
}
private:
//头指针 最重要的部分
Node* head;
};
class Stack
{
public:
//构造器 析构器(和clear)压入 (push) 弹出pop 取出top 大小和非空empty
Stack()
{
list = new LinkedList;
}
~Stack()
{
clear();
}
void clear()
{
list->clear();
}
void push(const T& t)
{
list->insertFront(t);
}
void pop()
{
list->erase(list->getHead());
}
T top()
{
return list->getHead();
}
unsigned int size()
{
return list->size();
}
bool empty()
{
return list->empty();
}
private:
LinkedList* list;
};
int main()
{
Stack s;
s.push(1);
s.push(2);
cout<<s.size()<<endl;
system("pause");
return 0;
}
二:用数组实现 :
技巧:找到num和下标之间的关系,核心是num num控制着数组是增删改查的核心,元素,弹出就-1 ,添加后就+1
#include <iostream>
#include <string>
using namespace std;
typedef string T;
class Stack
{
public:
Stack()
{
num=0;
}
~Stack(){clear();}
//清空
void clear()
{
num=0;
}
//增删查
void push(const T& t)
{
/*arr[num]=t;
num++;合二为一*/
arr[num++]=t;
}
void pop()
{
num--;
}
T top()
{
return arr[num-1];
}
//大小长度
unsigned int size()
{
return num;
}
bool empty()
{
return num==0;
}
private:
T arr[10];
unsigned int num;
};
分享到:
相关推荐
本主题聚焦于“数据结构C++版--栈的实现及基本操作”,我们将深入探讨栈这种特殊的数据结构以及如何用C++来实现它。 栈是一种线性数据结构,遵循“后进先出”(LIFO)的原则。这意味着最后插入的元素(称为顶元素...
本篇文章详细介绍了如何在VS2010环境下使用C++实现链式栈,包括数据结构的定义、链式栈的创建、入栈、出栈以及遍历操作的具体实现过程。链式栈因其动态分配的特点,在处理不确定大小的数据集合时具有明显优势。
链式栈是一种特殊的数据结构,它属于线性数据结构,并且利用链表来实现栈的操作。本节将详细介绍如何用C++来实现链式栈。 首先,我们需要了解栈的基本概念。栈是一种后进先出(LIFO)的数据结构,常用于临时存储和...
C++实现数据结构-栈
C++标准库提供了`std::stack`容器适配器,可以方便地实现栈操作。 4. **队列**:是先进先出(FIFO)的数据结构,类似于银行排队等候,先来的客户先服务。C++标准库中的`std::queue`容器适配器可以用于实现队列。 5...
本资料是《数据结构 C++实现 第2版》的习题答案及实验指导,由缪淮扣和沈俊编著。这份资源对学习者来说是一份宝贵的参考资料,可以帮助他们深入理解和应用所学的知识。 首先,关于数据结构的基本概念,主要包括数组...
在这个"数据结构C++-源代码"的压缩包中,我们很可能会找到一系列用于实现各种数据结构的C++源代码。 1. **数组**:数组是最基本的数据结构,它是一个元素类型相同的集合,可以通过索引访问。在C++中,数组可以是一...
在“数据结构C++ 朱战立”这个主题中,我们将会深入学习以下几个关键知识点: 1. **基本数据类型与数组**:C++中的基础数据类型包括整型、浮点型、字符型等,而数组则是这些元素的集合,它是最简单的一种数据结构,...
C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中的一部分,它提供了丰富的容器、迭代器、算法和函数对象等组件,极大地简化了数据结构和算法的实现。余文溪的《C++ STL--数据结构与算法...
由于C++的链表操作比数组更灵活,它允许在运行时动态调整大小,因此非常适合实现栈这种数据结构。 栈在许多算法和程序设计问题中都有应用,如深度优先搜索、表达式求值、括号匹配等。使用链表和模板实现的栈,不仅...
总之,这个压缩包提供的内容可能包括了一个C++实现的栈数据结构,通过分析和学习这个实现,你可以掌握如何在实际项目中应用栈,理解其内部工作原理,以及如何优化性能,比如通过动态扩容策略来减少不必要的内存开销...
本书不仅介绍了数据结构与算法的基本概念,还着重强调了面向对象编程范式(Object-Oriented Programming, OOP)在实际中的应用,特别是其在C++语言中的实现。 从给出的内容来看,本书至少包含了如下几个重要的知识...
邓俊辉教授的《C++ 数据结构》注重理论与实践相结合,深入浅出地介绍了各种经典数据结构(如数组、链表、栈、队列、树、图等)的概念、特性以及在C++语言中的实现。书中不仅包含了详尽的代码示例,还有丰富的习题和...
在C++中,我们可以使用数组或链表来实现栈。数组实现简单且效率高,但大小固定;链表实现则更灵活,可以动态扩展。 下面我们将以C++为例,讨论栈的两种常见实现: ### 数组实现 ```cpp #include class Stack { ...
2. **C++实现栈的两种方式** - **使用STL中的stack**:STL的`<stack>`库提供了栈的数据结构,可以直接使用,无需手动管理内存。例如: ```cpp #include #include int main() { std::stack<int> s; s.push...
一、实验目的:1、实现二叉树的存储结构(二叉链表或三叉链表等存储结构任选)2、熟悉二叉树基本术语的含义3、掌握使用栈和队列及递归思想完成二叉树相关操作的编程实现二、实验内容: 主要完成以下功能:1....
总之,"C++编程-数据结构与程序设计方法"这个主题涵盖了C++语言的核心要素,包括数据结构的实现和使用,以及面向对象编程和程序设计的最佳实践。掌握这些知识将使初学者能够编写出高效、可靠的软件,为进一步深入...
C++模板类实现栈 在给定的部分内容中,作者使用了C++的模板类来实现一个通用的栈结构。通过模板机制可以实现类型参数化,使得栈能够存储任何类型的元素。 ```cpp template class StackNode { friend class Stack; ...