C++栈(stack)的模板类实现代码

2025-05-27 0 56

本文实例为大家分享了C++(stack)的模板类实现代码,供大家参考,具体内容如下

1.基本概念

  中的元素遵守“先进后出”的原则(LIFO,Last In First Out)

  只能在顶进行插入和删除操作

  压(或推入、进)即push,将数据放入顶并将顶指针加一

  出(或弹出)即pop,将数据从顶删除并将顶指针减一

  的基本操作有:pop,push,判断空,获取顶元素,求大小

C++栈(stack)的模板类实现代码

2.构造

可以使用数组构造,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造

单向链表的头插法比较适合,链表头作为顶:

C++栈(stack)的模板类实现代码

节点的数据结构:

?

1

2

3

4

5

6

7

8

9
template<class T>

struct node

{

T value; //储存的值

node<T>* next;

node() :next(nullptr){} //构造函数

node(T t) :value(t), next(nullptr){}

};

模板类构造一个简单的stack类:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70
template<class T>

class myStack

{

int cnts; //入栈数量

node<T> *head; //栈的头部

public:

myStack(){ cnts = 0; head = new node<T>; }

void stackPush(T arg); //入栈

T stackPop(); //出栈

T stackTop(); //获取栈顶元素

void printStack(); //打印栈

int counts(); //获取栈内元素个数

bool isEmpty(); //判断空

};

template<class T>

void myStack<T>::stackPush(T arg)

{

node<T> *pnode = new node<T>(arg); //申请入栈元素的空间

pnode->next = head->next;

head->next = pnode;

cnts++;

}

template<class T>

T myStack<T>::stackPop()

{

if (head->next!=nullptr)

{

node<T>* temp = head->next;

head->next = head->next->next;

T popVal = temp->value;

delete temp;

return popVal;

}

}

template<class T>

T myStack<T>::stackTop()

{

if (head->next!=nullptr)

{

return head->next->value;

}

}

template<class T>

void myStack<T>::printStack()

{

if (head->next != nullptr)

{

node<T>* temp = head;

while (temp->next != nullptr)

{

temp = temp->next;

cout << temp->value << endl;

}

}

}

template<class T>

int myStack<T>::counts()

{

return cnts;

}

template<class T>

bool myStack<T>::isEmpty()

{

if (cnts)

return false;

else

return true;

}

GitHub:https://github.com/whlook/stackTemplate

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++栈(stack)的模板类实现代码 https://www.kuaiidc.com/73976.html

相关文章

发表评论
暂无评论