栈和队列

1、栈(one of the simplest and most improtant of all data structures )

栈可以分为顺序栈和链式栈两种。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。

1.1
顺序栈的实现(last in first out)

栈和队列_第1张图片

#include <iostream>
using namespace std;
const int maxstack = 100;//最大放置的个数
enum Error_code {success = 1, overflow = -1, underflow = -1}; //枚举法确定返回状态Error_code
typedef char Stack_entry; // 建立通用的模板
class Stack    // stack类
{
    public:
        Stack()
    {
        count = 0; //构造函数
    }
    bool empty();  //判断栈为空
    Error_code pop(); //弹出栈中的元素
    Error_code top(Stack_entry&item); //取栈顶元素,和pop不同在于他的栈顶元素还在,只是找到了这个元素
    Error_code push(const Stack_entry &item);//压入栈
    int size(); //栈的大小
    private:
        int count; //栈中元素的个数
   Stack_entry entry[maxstack];
};

Error_code Stack::push(const Stack_entry &item)
{
    Error_code outcome = success;
    if( count >= maxstack) {
        outcome = overflow;
    }
    else {
        entry[count++] =item;
    }
    return outcome;
}

Error_code Stack::pop()
{
    Error_code outcome = success;
    if(count == maxstack)
    {
        outcome = underflow;
    }
    else {
            count--;
        }
    return outcome;
}

Error_code Stack::top(Stack_entry &item) {
    Error_code outcome = success;
    if(count == 0)
    {
        outcome = underflow;
    }
    else
    {
        item = entry[count-1];
    }
    return outcome;
}

bool Stack::empty()
{
    bool outcome = true;
    if(count > 0)
    {
        outcome = false;
    }
    return outcome;
}

int Stack::size()
{
    return count;
}

int main()
{
    Stack numbers; //栈的对象
    for(int i = 0; i < 10; i++)
    {
        numbers.push(i);

    }
int v;
    while(!numbers.empty())
    {   numbers.top(v);
        cout<<v<<endl;
        numbers.pop();

    }
    return 0;
}

1.2栈的链式结构(linked stacks)

首先在使用指针的时候我们要注意垃圾回收的问题(garbage:no pointer referring to it ,and therefore there is no way to find it ),很少的垃圾没有太大问题,但是很多积累的垃圾就会影响我们的内存。所以每次新建一个节点( new node)就要对应的(delete node)

链式的栈和线性的区别就在于,链式不要求知道栈里面的容量,可以一直在末尾插入。这次我们把,末尾插入的叫做头指针(top_node)
栈和队列_第2张图片

你可能感兴趣的:(栈)