RationQueue.h
#pragma once class RationQueue { public: RationQueue(); ~RationQueue(); public: bool push(double d); //入栈 bool pop(double &data); //出栈 bool empty(); //判断栈是否为空 private: typedef struct Node { double data; Node *next; }Node, *pNode; pNode head; pNode tail; //带有头尾结点的链表 };RationQueue.cpp
#include <iostream> #include "RationQueue.h" RationQueue::RationQueue() { head = new Node; head->next = NULL; tail = head; } RationQueue::~RationQueue() { //删除所有结点(包括头结点) while (head != NULL) { Node *s = head->next; delete head; head = s; } } //入栈 bool RationQueue::push(double d) { Node *p = new Node; p->data = d; p->next = NULL; tail->next = p; tail = p; return true; } //出栈 bool RationQueue::pop(double &data) { Node *p = head->next; data = p->data; head->next = p->next; if (head->next == NULL)//此时只存在头结点 { tail = head; } delete p; p = NULL; return true; } //判断栈是否为空 bool RationQueue::empty() { /* if (head == tail) { return true; } else { return false; } */ return head == tail; }测试.cpp
#include <iostream> #include "RationQueue.h" #include <vld.h> using namespace std; void logo() { cout << "+------------------------------------------------+" << endl; cout << "+-------------------++1.入栈++-------------------+" << endl; cout << "+-------------------++2.出栈++-------------------+" << endl; cout << "+------------------------------------------------+" << endl; cout << "请选择:"; } int main() { RationQueue Q; bool quit = false; int n; double data; while (!quit) { logo(); cin >> n; switch (n) { case 1: cout << "入栈:"; cin >> data; Q.push(data); break; case 2: if (!Q.empty()) { Q.pop(data); cout << data << " 出栈!" << endl; } else { cout << "栈内无数据!" << endl; } break; default: quit = true; break; } } return 0; }
vld.h为检测内存溢出的工具
Visual Leak Detector read settings from: G:VLDvld.ini Visual Leak Detector Version 2.5 installed. No memory leaks detected. Visual Leak Detector is now exiting. |