C++数据结构学习:栈和队列

王朝c/c++·作者佚名  2008-06-01
宽屏版  字体: |||超大  

栈和队列是操作受限的线性表,似乎每本讲数据结构的数都是这么说的。有些书按照这个思路给出了定义和实现;但是很遗憾,这本书没有这样做,所以,原书中的做法是重复建设,这或许可以用不是一个人写的这样的理由来开脱。

顺序表示的栈和队列,必须预先分配空间,并且空间大小受限,使用起来限制比较多。而且,由于限定存取位置,顺序表示的随机存取的优点就没有了,所以,链式结构应该是首选。

栈的定义和实现

#ifndef Stack_H

#define Stack_H

#include "List.h"

template class Stack : List//栈类定义

{

public:

void Push(Type value)

{

Insert(value);

}

Type Pop()

{

Type p = *GetNext();

RemoveAfter();

return p;

}

Type GetTop()

{

return *GetNext();

}

List ::MakeEmpty;

List ::IsEmpty;

};

#endif

更多内容请看C/C++技术专题 数据结构 数据结构教程专题,或

队列的定义和实现

#ifndef Queue_H

#define Queue_H

#include "List.h"

template class Queue : List//队列定义

{

public:

void EnQueue(const Type &value)

{

LastInsert(value);

}

Type DeQueue()

{

Type p = *GetNext();

RemoveAfter();

IsEmpty();

return p;

}

Type GetFront()

{

return *GetNext();

}

List ::MakeEmpty;

List ::IsEmpty;

};

#endif

更多内容请看C/C++技术专题 数据结构 数据结构教程专题,或

测试程序

#ifndef StackTest_H

#define StackTest_H

#include "Stack.h"

void StackTest_int()

{

cout

cout

Stack a;

cout

for (int i = 1; i

while (!a.IsEmpty()) cout cout}#endif#ifndef QueueTest_H#define QueueTest_H#include "Queue.h"void QueueTest_int(){coutcoutQueuea;coutfor (int i = 1; iwhile (!a.IsEmpty()) coutcout}#endif【后记】没什么好说的,你可以清楚的看到,在单链表的基础上,栈和队列的实现是如此的简单,这也是我对于原书重复建设不满的最大原因。

更多内容请看C/C++技术专题 数据结构 数据结构教程专题,或

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有