數據結構-使用隊列實現棧
阿新 • • 發佈:2017-09-28
第一次 構造函數 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 { publicView Code: 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; }
運行結果:
數據結構-使用隊列實現棧