找回密码
 立即注册
查看: 885|回复: 2

【cpp】一个简单的链接栈模型。。

[复制链接]

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2013-9-27 23:31:07 | 显示全部楼层 |阅读模式
学数据结构的一点想法

LinkStack.h文件:
  1. #ifndef LINKSTACH_H
  2. #define LINKSTACH_H

  3. #include <stdexcept>
  4. using std::exception;

  5. template<class Entry>
  6. class LinkStack
  7. {
  8. private:
  9.         //template<class Entry>
  10.         struct StackToken
  11.         {
  12.                 Entry data;
  13.                 StackToken *next;
  14.         };

  15.         StackToken *ptr;
  16.         size_t count;

  17.         void freeptr()
  18.         {
  19.                 StackToken *nptr = ptr;
  20.                 while(nptr)
  21.                 {
  22.                         StackToken *tmp = nptr->next;
  23.                         delete nptr;
  24.                         nptr = tmp;
  25.                 }
  26.         }

  27.         void initptr(StackToken *p)
  28.         {
  29.                 StackToken *nptr = p.
  30.                         **tail = &ptr;
  31.                 while(nptr)
  32.                 {
  33.                         StackToken *tmp = new StackToken;
  34.                         tmp->data = nptr->data;
  35.                         *tail = tmp;
  36.                         nptr = nptr->next;
  37.                         tail = &(*tail)->next;
  38.                 }
  39.                 *tail = 0;
  40.         }

  41. public:
  42.         LinkStack() : ptr(0), count(0) {}

  43.         ~LinkStack() {freeptr();}

  44.         LinkStack(const LinkStack &that) {initptr(that->ptr);}

  45.         LinkStack& operator=(const LinkStack &that)
  46.         {
  47.                 if(this != *that)
  48.                 {
  49.                         freeptr();
  50.                         initptr(that->ptr);
  51.                 }
  52.         }

  53.         void push(const Entry &e)
  54.         {
  55.                 StackToken *t = new StackToken;
  56.                 t->data = e;
  57.                 t->next = ptr;
  58.                 ptr = t;
  59.                 count++;
  60.         }

  61.         void pop()
  62.         {
  63.                 if(!count) throw exception("栈已空!");
  64.                 StackToken *t = ptr;
  65.                 ptr = t->next;
  66.                 delete t;
  67.                 count--;
  68.         }
  69.          
  70.         bool empty() {return count == 0;}

  71.         Entry top()
  72.         {
  73.                 if(!count) throw exception("栈已空!");
  74.                 return ptr->data;
  75.         }

  76. };

  77. #endif //LINKSTACH_H
复制代码
main.cpp文件:
  1. #include "LinkStack.h"
  2. #include <iostream>
  3. using namespace std;

  4. int main()
  5. {

  6.         LinkStack<int> psgs;
  7.         int n;
  8.         cout << "请输入游客人数:" << endl;
  9.          cin >> n;
  10.         cout << "按顺序输入乘客编号:" << endl;
  11.         for(int i = 0; i < n; i++)
  12.          {
  13.                  int item;
  14.                  cin >> item;
  15.                 psgs.push(item);
  16.         }
  17.         cout << "乘客下车次序是:" << endl;
  18.         while(!psgs.empty())
  19.         {
  20.                 cout << psgs.top() << ' ';
  21.                 psgs.pop();
  22.         }
  23.         cout << endl;
  24.         system("pause");
  25.         return 0;
  26. }
复制代码
回复

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-9-28 17:34:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

5895

回帖

118

基友

1万

积分

苍海之魂

invincible

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2013-9-28 21:46:03 来自手机 | 显示全部楼层
学算法什么书比较好啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-5-20 19:51 , Processed in 0.036360 second(s), 27 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部