实验八 泛型程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八泛型程序设计

软件1502 成进151303230

一、实验目的

1.了解链表类的定义与实现,学习其使用方法。

2.了解栈类的定义与实现,学习其使用方法。

3.了解队列类的定义与实现,学习其使用方法。

4.了解C++标准模板库STL的使用方法。

二、实验任务

1.编写程序link.h,实现教材中例9—6的链表类。在测试程序lab9—1.cpp中定义两个整型链表A和B,分别插入5个元素,然后把B中的元素加入A的尾部。

2.编写程序queue.h,用链表实现队列(或栈)类。在测试程序lab9—2.cpp中定义一个整型队列(或栈)对象,插入5个整数,压人队列(或栈),再依次取出并显示出来。

3.使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题。

三、实验步骤

1.参照教材《C++语言程序设计》中链表类LinkeclI。ist的定义(教材中的例程9—6.h),给出其实现,注意合理使用NodIe类(教材中的例程9—3.h)的成员函数。在测试程序中定义整型链表A和B,分别插入5个元素,使用循环语句显示链表中的元素,然后把B中的元素加入A的尾部,再显示出来。

2.队列类的特点就是其元素的操作顺序为先入先出(FIFO),用上题中的链表类实现队列类,用链表类的成员函数实现队列的成员函数,在测试程序中定义一个整型队列对象,观察队列类中的元素先入先出的特点。

3.在程序中包含语句#include ,使用deque类的方法push_back()、empty()、pop_front()完成上一小题的要求。程序名:lab9_3.cpp。、

四、实验程序

1、

#include "link.h"

int main()

{

LinkedList A, B;

for(int i=0;i<5;i++)

{

A.InsertRear(2*i+1);

B.InsertRear(2*i+2);

}

A.Reset();

cout << "链表A的元素为:" ;

while(!A.EndOfList())

{

cout << A.Data() << " ";

A.Next();

}

cout << endl;

B.Reset();

cout << "链表B的元素为:" ;

while(!B.EndOfList())

{

cout << B.Data() << " ";

B.Next();

}

cout << endl;

cout << "把B中的元素插入A中..." << endl;

B.Reset();

while(!B.EndOfList())

{

A.InsertRear(

B.Data());

B.Next();

}

A.Reset();

cout << "此时,链表A的元素为:" ;

while(!A.EndOfList())

{

cout << A.Data() << " ";

A.Next();

}

cout << endl;

}

#ifndef LINKEDLIST_CLASS

#define LINKEDLIST_CLASS

#include

#include

using namespace std;

#ifndef NULL

const int NULL = 0;

#endif // NULL

#include "9-3.h

template

class LinkedList

{

private:

Node *front, *rear;

Node *prevPtr, *currPtr;

int size;

int position;

Node *GetNode(const T& item,Node *ptrNext=NULL);

void FreeNode(Node *p);

void CopyList(const LinkedList& L);

public:

LinkedList(const LinkedList& L);

~LinkedList(void);

LinkedList& operator= (const LinkedList& L);

int ListSize(void) const;

int ListEmpty(void) const;

void Reset(int pos = 0);

void Next(void);

int EndOfList(void) const;

int CurrentPosition(void) const;

void InsertFront(const T& item);

void InsertRear(const T& item);

void InsertAt(const T& item);

void InsertAfter(const T& item);

T DeleteFront(void);

void DeleteAt(void);

T& Data(void);

void ClearList(void);

};

template

Node *LinkedList::GetNode(const T& item,

Node* ptrNext)

{

Node *p;

p = new Node(item,ptrNext);

if (p == NULL)

{

cout << "Memory allocation failure!\n";

exit(1);

}

return p;

}

template

void LinkedList::FreeNode(Node *p)

{

delete p;

}

template

void LinkedList::CopyList(const LinkedList& L) {

Node *p = L.front;

int pos;

while (p != NULL)

{

相关文档
最新文档