數(shù)據(jù)結(jié)構(gòu)–隊(duì)列的鏈表實(shí)現(xiàn)

隊(duì)列的鏈表實(shí)現(xiàn)代碼定義

typedef struct LinkNode
{
ElemType data;
struct LinkNode* next;
}LinkNode;
typedef struct
{
LinkNode *front, *rear;
}LinkQueue;
帶頭結(jié)點(diǎn)
初始化

void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
}
判斷隊(duì)列是否為空
bool IsEmpty(LinkQueue Q)
{
return Q.front == Q.rear;
}
入隊(duì)

void EnQueue(LinkQueue &Q, ElemType x)
{
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s; //新結(jié)點(diǎn)插入到rear之后
Q.rear = s; //修改表尾指針
}
出隊(duì)




bool DeQueue(LinkQueue &Q, ElemType &x)
{
if (Q.front == Q.rear) return false;
LinkNode* p = Q.front->next;
x = p->data; //用變量x返回隊(duì)頭元素
Q.front->next = p->next; //修改頭結(jié)點(diǎn)的next指針
if (Q.rear == p) //此次是最后一個(gè)結(jié)點(diǎn)出隊(duì)
Q.rear = Q.front; //修改rear指針
free(p);
return true;
}
不帶頭結(jié)點(diǎn)
初始化
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = NULL;
}
判斷隊(duì)列是否為空
bool IsEmpty(LinkQueue Q)
{
return Q.front == NULL;
}
入隊(duì)

void EnQueue(LinkQueue &Q, ElemType x)
{
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
//不帶頭結(jié)點(diǎn)的隊(duì)列,第一個(gè)元素入隊(duì)時(shí)需要特別處理
if (Q.front == NULL)
Q.front = s, Q.rear = s;
else
Q.rear->next = s, Q.rear = s;
}
出隊(duì)


bool DeQueue(LinkQueue &Q, ElemType &x)
{
if (Q.front == NULL) return false;
LinkNode* p = Q.front;
x = p->data; //用變量x返回隊(duì)頭元素
Q.front = p->next; //修改front指針
if (Q.rear == p) //此次是最后一個(gè)結(jié)點(diǎn)出隊(duì)
Q.front = Q.rear = NULL; //front & rear 指向NULL
free(p);
return true;
}
隊(duì)滿
鏈?zhǔn)酱鎯?chǔ)――一般不會(huì)隊(duì)滿,除非內(nèi)存不足文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-516137.html
知識(shí)點(diǎn)回顧與重要考點(diǎn)

文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-516137.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)--隊(duì)列的鏈表實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!