编辑: You—灰機 | 2013-06-10 |
} ~ CirQueue( void EnQueue(elemtp x) struct student DeQueue( struct student GetQueue( {front==rear? return 1: return 0;
} int Length();
void PrintQueue( int Enquire(string num);
void Delete(int i) private: elemtp data[QueueSize];
int front, rear;
};
在CirQueue类中,提供了如下成员函数 (1) 函数声明 void EnQueue(elemtp x) 完成的功能 将元素x入队 (2) 函数声明 struct student DeQueue() 完成的功能 将队头元素出队 (3) 函数声明 struct student GetQueue() 完成的功能 读取队头元素算法 (4) 函数声明 int Length();
完成的功能 取队列长度 (5) 函数声明 void PrintQueue( );
完成的功能 遍历队列,按序号依次输出各元素 (6) 函数声明 void Delete(int i);
完成的功能 删除队列的第i个元素 (7) 函数声明 int Enquire(string num);
完成的功能 查询队列中是否存在指定的元素 运行结果与分析(测试) 图五:插入操作 图六:删除操作:(删除郭晓华同学) 图七:按学号查询 图八:按姓名查询 图十:全部显示功能 综合上面的实验情况看,软件运行正常,无异常情况 总结(收获与体会) 通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题. 附:源代码 CirQueue.h #ifndef CIRQUEUE_H #define CIRQUEUE_H #include #include "SkinPlusPlus.h" #include using namespace std;
const int QueueSize=100;
//100只是示例性的数据,可以根据实际问题具体定义 const string number,name,grade;
struct student //结构体 { string num;
//学生学号 string name;
//学生姓名 string grade;
//学生班级 };
class CirQueue { public: CirQueue() {front=rear=0;
} //构造函数,置空队 ~ CirQueue(析构函数,释放队列中各结点的存储空间 void EnQueue(struct student x)将元素x入队 student DeQueue(将队头元素出队 student GetQueue(取队头元素(并不删除) bool Empty(){ if(front==rear) return true;
else return false;
} //判断队列是否为空 int Length();
void PrintQueue(遍历队列,按序号依次输出各元素 int Enquire(string num);
//查询队列中是否存在输入的学号 void Delete(删除队列的元素 public: student data[QueueSize];
//存放队列元素的数组 int front, rear;
//队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置 };
#endif /* * 前置条件:队列已存在 * 输入:元素值x * 功能:在队尾插入一个元素 * 输出:如果插入不成功,抛出异常 * 后置条件:如果插入成功,队尾增加了一个元素 */ void CirQueue::EnQueue(struct student x) { if ((rear+1)%QueueSize ==front) throw "上溢";
rear=(rear+1)%QueueSize;
//队尾指针在循环意义下加1 data[rear]=x;
在队尾处插入元素 } /* * 前置条件:队列已存在 * 输入:无*功能:删除队头元素 * 输出:如果删除成功,返回被删元素值,否则,抛出删除异常 * 后置条件:如果删除成功,队头减少了一个元素 */ struct student CirQueue::DeQueue() { if (rear==front) throw "下溢";
front=(front+1)%QueueSize;
队头指针在循环意义下加1 return data[front]读取并返回出队前的队头元素,注意队头指针 指向队头元素的前一个位置 /* * 前置条件:队列已存在 * 输入:无*功能:读取队头元素 * 输出:若队列不空,返回队头元素 * 后置条件:队列不变 */ struct student CirQueue::GetQueue() { int i;