1. 程式人生 > >資料結構佇列C++程式碼實現

資料結構佇列C++程式碼實現

// Queue.cpp : 定義控制檯應用程式的入口點。
//visual studio 2013

/*
@author:inc_cool
 */
#include "stdafx.h"
#include"iostream"


using namespace std;


#define ok 1
typedef int QueueDataType;
typedef int Status;


//定義佇列裡的節點
struct queueNode{
QueueDataType data;
queueNode *queueNodeNext;
};


//定義佇列連結串列
struct queueList{
queueNode *queueHeadNode, *queueTailNode;
};
//初始化佇列
Status InitQueue(queueList &queue){


queue.queueHeadNode = queue.queueTailNode=(queueNode*)malloc(sizeof(queueNode));
if (!queue.queueHeadNode&&!queue.queueTailNode)
{
cout << "分配失敗" << endl;
exit(OVERFLOW);
}
queue.queueHeadNode->queueNodeNext = NULL;
return ok;
}
//插入佇列元素(尾部)
Status InsertQueue(queueList &queue, QueueDataType insertData)
{
//給一個queueNode分配記憶體,裝入資料
queueNode *insertQueueNode = (queueNode*)malloc(sizeof(queueNode));
if (!insertQueueNode)
{
cout << "節點記憶體分配失敗" << endl;
//exit(OVERFLOW);
}


insertQueueNode->data = insertData;
insertQueueNode->queueNodeNext = NULL;


queue.queueTailNode->queueNodeNext = insertQueueNode;
queue.queueTailNode = insertQueueNode;

return ok;
}
//遍歷佇列
Status QueueTraverse(queueList queue)
{
queueNode* queueTraverseNode = (queueNode*)malloc(sizeof(queueNode));
if (!queueTraverseNode)
{
cout << "queueTraverseNode分配失敗" << endl;
//exit(OVERFLOW);
}
queueTraverseNode = queue.queueHeadNode->queueNodeNext;
if (queue.queueHeadNode == queue.queueTailNode)
{
cout << "佇列為空" << endl;
}
else{
while ( queueTraverseNode)
{
cout << queueTraverseNode->data << endl;
queueTraverseNode = queueTraverseNode->queueNodeNext;
}
}
free(queueTraverseNode);
return ok;
}
//出佇列(頭元素)
Status GetTopQueue(queueList &queue, QueueDataType &getTopElem)
{
queueNode* getTopQueueNode = (queueNode*)malloc(sizeof(queueNode));
if (!getTopQueueNode)
{
cout << "getTopQueueNode記憶體分配失敗" << endl;
//exit(OVERFLOW);
}
getTopQueueNode = queue.queueHeadNode->queueNodeNext;
if (queue.queueHeadNode==queue.queueTailNode)
{
cout << "佇列為空,沒有頭元素" << endl;
}
else{
getTopElem = getTopQueueNode->data;
}
free(getTopQueueNode);
return ok;
}
int _tmain(int argc, _TCHAR* argv[])
{
queueList queue;
QueueDataType elem=0;
InitQueue(queue);

for (int i = 0; i < 5;i++)
{
InsertQueue(queue,i);
}


QueueTraverse(queue);
GetTopQueue(queue, elem);
cout << "elem is:" << elem << endl;
  
system("pause");
return 0;

}

感謝我的室友,由於他不是計算機專業的,他在自學資料結構。為了讓他更好的瞭解資料結構,我答應他給他寫資料結構的原始碼。本來我感覺資料結構有什麼好寫的,等我真正寫的時候,發現自己把資料結構的忘得差不多了。我感謝我的室友,讓我有動力有毅力去寫完正本資料結構的演算法,也感謝嚴蔚敏老師。PS:收穫不小!竊喜^.^