您的位置:首页 > 编程语言 > C语言/C++

C++实现链队列

2015-10-07 09:36 381 查看
/*
* LkQueue.h
*
* Created on: Oct 7, 2015
* Author: chris
*/

#ifndef LKQUEUE_H_
#define LKQUEUE_H_

typedef int ElemType;

struct LQNode{
ElemType data;
LQNode * next;
};

struct LkQueue{
LQNode * front;
LQNode * rear;
};

bool LkQueueCreate(LkQueue& lq);
void LkQueueDestroy(LkQueue& lq);

void LkQueueClear(LkQueue& lq);
int LkQueueLength(LkQueue lq);
bool LkQueueEmpty(LkQueue lq);

bool LkQueueEnQueue(LkQueue& lq, ElemType e);
bool LkQueueFront(LkQueue lq, ElemType& e);
bool LkQueueDeQueue(LkQueue& lq);

void LkQueueDisplay(LkQueue lq);

#endif /* LKQUEUE_H_ */


/*
* LkQueue.cpp
*
* Created on: Oct 7, 2015
* Author: chris
*/

#include"LkQueue.h"
#include<iostream>

using namespace std;

bool LkQueueCreate(LkQueue& lq)
{
lq.front = lq.rear = new LQNode;
if(!lq.front) return false;
else return true;
}

void LkQueueDestroy(LkQueue& lq)
{
LQNode * pcur;
while(lq.front) {
pcur = lq.front;
lq.front = lq.front->next;
delete pcur;
}
lq.rear = NULL;
}

void LkQueueClear(LkQueue& lq)
{
LQNode * sub = lq.front->next, * pcur;
while(sub) {
pcur = sub;
sub = sub->next;
delete pcur;
}
lq.rear = lq.front;
}

int LkQueueLength(LkQueue lq)
{
LQNode *pcur = lq.front->next;
int cnt = 0;
while(pcur) {
++cnt;
pcur = pcur->next;
}
return cnt;
}

bool LkQueueEmpty(LkQueue lq)
{
return lq.front == lq.rear;
}

bool LkQueueEnQueue(LkQueue& lq, ElemType e)
{
LQNode *pcur = new LQNode;
if(!pcur) return false;
pcur->data = e;
pcur->next = NULL;

lq.rear->next = pcur;
lq.rear = pcur;
return true;
}

bool LkQueueFront(LkQueue lq, ElemType& e)
{
if(lq.front == lq.rear) return false;

e = lq.front->next->data;
return true;
}

bool LkQueueDeQueue(LkQueue& lq)
{
if(lq.front == lq.rear) return false;

LQNode * pcur = lq.front;
lq.front = lq.front->next;
delete pcur;
return true;
}

void LkQueueDisplay(LkQueue lq)
{
LQNode * pcur = lq.front->next;
while(pcur) {
cout << pcur->data << " ";
pcur = pcur->next;
}
cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: