1. 程式人生 > >數據結構-使用隊列實現棧

數據結構-使用隊列實現棧

第一次 構造函數 queue div int assert log 函數 using

1:考點:編程實現下面的stack,並根據stack完成queue的操作

class MyStack

{

void push(data);

void pop(&data);

bool isEmpty();

}

代碼如下:

技術分享
#include "stdafx.h"
#include<malloc.h>
#include <iostream>
#include <assert.h>
using namespace std;
/*單鏈表的節點,data表示節點的數據域,next指向下一個節點*/
class MyData
{
public
: MyData() :data(0), next(NULL) {};//默認構造函數,這樣表示後,主體中不用再寫這個函數了 MyData(int value) :data(value), next(NULL) {};//帶參數的構造函數 int data;//數據域 MyData *next;//下一個節點 }; /*表示棧的定義,其中public成員top表示棧頂,由於不能直接操作棧底,因此這裏沒有定義棧底的指針。 在默認構造函數中,把棧頂指針top置空,表示此時棧為空棧。*/ class MyStack { public: MyStack() :top(NULL) {};
//默認構造函數 void push(MyData data);//進棧 void pop(MyData *pData);//出棧 bool IsEmpty();//是否為空棧 MyData *top;//棧頂 }; //進棧 void MyStack::push(MyData data) { MyData *pData = NULL; pData = new MyData(data.data);//生成新節點 pData->next = top; top = pData; /*---測試---*/ //cout << "棧頂地址:" << top << endl;
//cout << "棧頂地址中的內容:" << top->data << endl; /*---*/ } //判斷棧是否為空 bool MyStack::IsEmpty() { return(top == NULL);//如果top為空,則返回1,否則返回0 } //出棧 void MyStack::pop(MyData *data)//將刪除的節點保存到data中 { if (IsEmpty())//如果棧為空,直接返回 { return; } data->data = top->data;//給傳出的參數賦值 MyData *p = top;//臨時保存原棧頂節點 top = top->next;//移動棧頂,指向下一個節點 delete p;//釋放原棧頂節點內存 } int main() { MyData data(0);//定義一個節點,使用帶參數的構造函數 MyStack s;//定義一個棧結構 s.push(MyData(1)); s.push(MyData(2)); s.push(MyData(3)); s.pop(&data);//第一次出棧,並且將刪除的節點的數據保存到data參數中 cout << "pop" << data.data << endl; s.pop(&data);//第二次出棧,並且將刪除的節點的數據保存到data參數中 cout << "pop" << data.data << endl; s.pop(&data);//第三次出棧,並且將刪除的節點的數據保存到data參數中 cout << "pop" << data.data << endl; cout << "Empty=" << s.IsEmpty() << endl;//打印判空 return 0; }
View Code

運行結果:

技術分享

數據結構-使用隊列實現棧