c++顺序栈的实现


一.实验目的

     巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题,巩固课堂学习。


实验内容

1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

这里用顺序栈来实现。


//

//  main.cpp

//  顺序栈

//

//  Created by 梁华建 on 2017/10/12.

//  Copyright © 2017 梁华建. All rights reserved.

//


#include


const int StackSize=100;

//

template <class Datatype>

class SeqStack {

private:

    Datatype data[StackSize];

    int top;

public:

    SeqStack(){top=-1;};    //将项顶指针置为-1

    ~SeqStack(){}

    void Push(Datatype x);

    Datatype Pop();

    Datatype GetTop();//取栈顶元素实现

    int Empty(); //判断是否为空

    void printlist(); //打印

};


template <class Datatype>

int SeqStack::Empty()

{

    if (top==-1) {

        return 1;

    }

    else return 0;

}

//入栈操作

template <class Datatype>

void SeqStack::Push(Datatype x)

{

    if (top==StackSize-1) throw "栈空间已满,无法再添加";

        data[++top]=x;

}

//出栈操作

template <class Datatype>

Datatype SeqStack::Pop()

{

    if (top==-1) throw "栈已经为空";

    

        Datatype x;

       x=data[top--];

        return x;

    

}


template <class Datatype>

Datatype SeqStack::GetTop()

{

    if (top==-1) throw "这是空栈";

    return data[top];

        

}

template <class Datatype>

void  SeqStack::printlist()

{

    if (top==-1) throw "这是空栈";

    for (int i=0; i<=top; i++) {

        std::cout<<data[i]<<"\n";

    }

}


int main(int argc, const char * argv[]) {

    SeqStack<int> Student = SeqStack<int>();

    std::cout<<"is empty?"<Empty();

    for (int i=0; i<10; i++) {

        Student.Push(i);

    }

    std::cout<<"is empty?"<Empty();

    std::cout<<"The top word is"<GetTop();

    Student.printlist();

    std::cout<<"Pop the pop word,and it's "<Pop()<<"\n";

 std::cout<<"The top word is"<GetTop()<<"\n";

    return 0;

}

c++顺序栈的实现_第1张图片



实验总结:

这次顺序栈是比较简单的,特点就是先进后出,就像羽毛球筒装羽毛球,每次进栈top节点后移一位,就控制头结点就行。缺点十分明显,插入和删除操作比较麻烦会移动大量元素。


你可能感兴趣的:(数据结构)