課程
/后端開發
/C++
/數據結構探險—隊列篇
出列的時候傳入的參數沒有什么用啊。。。而且出列函數的第一行代碼感覺是多余的。。。。。而且清空隊列也并不是真正的清空對列。。。在內存中的數據也還在,并沒有回歸到原始的狀態。。。。只是訪問的方式讓我們誤以為數據已經清空了而已。
2016-07-28
源自:數據結構探險—隊列篇 4-2
正在回答
不僅出列的第一行代碼多余,出列函數的參數也多余,老師這么寫是為了方便打印出出列對象,展示隊列的特性是先進先出。你能看出第一行多余,說明你已經理解得很好。至于清空隊列,我也納悶。。。但是清空的意義是為了可以繼續插入,從這個角度理解就說的通,我是這么理解的。求采納
未道修 提問者
誰記得
雖然清空之后內存中二進制數據仍舊存在但它已經沒有意義了,當你下一次寫入內存的時候它就會被覆蓋。所以這個清空方式沒有影響并且也很方便。
#ifndef MYQUEUE_H#define MYQUEUE_Hclass MyQueue{public:?MyQueue(int queueCapacity);?virtual ~MyQueue();?void ClearQueue();//清空?bool QueueEmpty() const;?bool QueueFull()const;?int QueueLength()const;?bool EnQueue(int element);?bool DeQueue(int &element);?void QueueTraverse();//遍歷private:?int *m_pQueue;//隊列數組指針?int m_iQueueLen;//隊列元素個數?int m_iQueueCapacity;//隊列數組容量?int m_iHead;?int m_iTail;};
#endif
MyQueue::MyQueue(int queueCapacity){?m_iQueueCapacity = queueCapacity;?m_pQueue = new int[m_iQueueCapacity];?ClearQueue();}MyQueue::~MyQueue(){?delete[]m_pQueue;?m_pQueue = NULL;
}void MyQueue::ClearQueue(){?m_iHead = 0;?m_iTail = 0;?m_iQueueLen = 0;
}bool MyQueue::QueueFull() const{?if (m_iQueueLen == m_iQueueCapacity)?{??return true;?}?else?{??return false;?}}bool MyQueue::QueueEmpty() const{?if (m_iQueueLen == 0)?{??return true;?}?else?{??return false;?}}int MyQueue::QueueLength()const{?return m_iQueueLen;}
bool MyQueue::EnQueue(int element){?if (QueueFull())?{??return false;?}?else?{??m_pQueue[m_iTail] = element;??m_iTail++;??m_iTail = m_iTail%m_iQueueCapacity;??m_iQueueLen++;??return true;?}}bool MyQueue::DeQueue(int &element){?if (QueueEmpty())?{??return false;?}?else?{??element = m_pQueue[m_iHead];??m_iHead++;??m_iHead %= m_iQueueCapacity;??m_iQueueLen--;??return true;?}}void MyQueue::QueueTraverse(){?for (int i = m_iHead; i < m_iQueueLen+ m_iHead; i++)?{??cout << m_pQueue[i%m_iQueueCapacity]<<endl;?}}
int main(){?MyQueue *p = new MyQueue(20);
?p->EnQueue(10);?p->EnQueue(12);?p->EnQueue(14);?p->EnQueue(16);?p->EnQueue(18);
?p->QueueTraverse();?cout << endl;
?int e = 0;?p->DeQueue(e);?cout << e <<endl;
?p->DeQueue(e);?cout << e <<endl;?cout << endl;
?p->QueueTraverse();?p->ClearQueue();?cout <<endl;?p->EnQueue(20);?p->EnQueue(30);?p->QueueTraverse();
?delete p;?p = NULL;
?system("pause");??? return 0;}
舉報
與現實最為貼近的數據結構-隊列,帶大家進入數據結構的美妙世界
2 回答諸位大神,幫幫忙?。?!
1 回答數據結構大神有嗎?
1 回答求大佬幫助
2 回答在VS2015下編譯出現的問題,求解
2 回答求問 哪里錯了 大概是if那塊
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-07-30
不僅出列的第一行代碼多余,出列函數的參數也多余,老師這么寫是為了方便打印出出列對象,展示隊列的特性是先進先出。你能看出第一行多余,說明你已經理解得很好。至于清空隊列,我也納悶。。。但是清空的意義是為了可以繼續插入,從這個角度理解就說的通,我是這么理解的。求采納
2016-08-12
雖然清空之后內存中二進制數據仍舊存在但它已經沒有意義了,當你下一次寫入內存的時候它就會被覆蓋。所以這個清空方式沒有影響并且也很方便。
2016-07-29
#ifndef MYQUEUE_H
#define MYQUEUE_H
class MyQueue
{
public:
?MyQueue(int queueCapacity);
?virtual ~MyQueue();
?void ClearQueue();//清空
?bool QueueEmpty() const;
?bool QueueFull()const;
?int QueueLength()const;
?bool EnQueue(int element);
?bool DeQueue(int &element);
?void QueueTraverse();//遍歷
private:
?int *m_pQueue;//隊列數組指針
?int m_iQueueLen;//隊列元素個數
?int m_iQueueCapacity;//隊列數組容量
?int m_iHead;
?int m_iTail;
};
#endif
MyQueue::MyQueue(int queueCapacity)
{
?m_iQueueCapacity = queueCapacity;
?m_pQueue = new int[m_iQueueCapacity];
?ClearQueue();
}
MyQueue::~MyQueue()
{
?delete[]m_pQueue;
?m_pQueue = NULL;
}
void MyQueue::ClearQueue()
{
?m_iHead = 0;
?m_iTail = 0;
?m_iQueueLen = 0;
}
bool MyQueue::QueueFull() const
{
?if (m_iQueueLen == m_iQueueCapacity)
?{
??return true;
?}
?else
?{
??return false;
?}
}
bool MyQueue::QueueEmpty() const
{
?if (m_iQueueLen == 0)
?{
??return true;
?}
?else
?{
??return false;
?}
}
int MyQueue::QueueLength()const
{
?return m_iQueueLen;
}
bool MyQueue::EnQueue(int element)
{
?if (QueueFull())
?{
??return false;
?}
?else
?{
??m_pQueue[m_iTail] = element;
??m_iTail++;
??m_iTail = m_iTail%m_iQueueCapacity;
??m_iQueueLen++;
??return true;
?}
}
bool MyQueue::DeQueue(int &element)
{
?if (QueueEmpty())
?{
??return false;
?}
?else
?{
??element = m_pQueue[m_iHead];
??m_iHead++;
??m_iHead %= m_iQueueCapacity;
??m_iQueueLen--;
??return true;
?}
}
void MyQueue::QueueTraverse()
{
?for (int i = m_iHead; i < m_iQueueLen+ m_iHead; i++)
?{
??cout << m_pQueue[i%m_iQueueCapacity]<<endl;
?}
}
int main()
{
?MyQueue *p = new MyQueue(20);
?p->EnQueue(10);
?p->EnQueue(12);
?p->EnQueue(14);
?p->EnQueue(16);
?p->EnQueue(18);
?p->QueueTraverse();
?cout << endl;
?int e = 0;
?p->DeQueue(e);
?cout << e <<endl;
?p->DeQueue(e);
?cout << e <<endl;
?cout << endl;
?p->QueueTraverse();
?p->ClearQueue();
?cout <<endl;
?p->EnQueue(20);
?p->EnQueue(30);
?p->QueueTraverse();
?delete p;
?p = NULL;
?system("pause");
??? return 0;
}