提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、链队列是什么?
示例:链队列即为队列的链式存储结构,简称链队列。
二、C语言实现
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef int status;
typedef int QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode ,*QueuePtr;
typedef struct {
QueuePtr front, rear;
int count;
} LinkQueue;
status EnQueue(LinkQueue *q, QElemType e){
QueuePtr node = (QueuePtr)malloc(sizeof(QNode));
if (!node) return ERROR;//分配存储失败
node->data = e;
node->next = NULL;
q->rear->next = node;
q->rear = node;
q->count++;
return OK;
}
status DeQueue(LinkQueue *q, QElemType *e){
QueuePtr p;
if (q->front == q->rear){
return ERROR;//队列为空
}
p = q->front->next;
*e = p->data;
q->front->next = p->next;
if (q->rear == p){
q->rear = q->front;
}
free(p);
q->count--;
return OK;
}
int main(int argc, char const *argv[]){
//todo
QNode q = {-1, NULL};
LinkQueue LQ= {&q, &q, 0};
printf("链队列的长度为%d\n", LQ.count);
printf("向链队列中加入元素1/21/32/45/99\n");
EnQueue(&LQ, 1);
EnQueue(&LQ, 21);
EnQueue(&LQ, 32);
EnQueue(&LQ, 45);
EnQueue(&LQ, 99);
printf("链队列的长度为%d\n", LQ.count);
printf("出依次队列\n");
int e;
DeQueue(&LQ, &e);
printf("出队列的元素为%d\n", e);
printf("链队列的长度为%d\n", LQ.count);
return 0;
}
运行结果:
三、python实现
# -*-coding:utf-8-*-
class QNode:
def __init__(self, data, next=None):
self.data = data
self.next = next
class LinkQueue:
def __init__(self):
self.front =self.rear = QNode(-1)
self.count = 0
def LQLength(self):
return self.count
def EnQueue(self, e):
node = QNode(e)
self.rear.next = node
self.rear = node
self.count += 1
def DeQueue(self):
if self.front == self.rear:
return "LinkQueue is empty."
p = self.front.next
e = p.data
self.front.next = p.next
if self.rear == p:
self.rear = self.front
self.count -= 1
return e
if __name__ == '__main__':
LQ = LinkQueue()
print("链队列的长度为%s" % LQ.LQLength())
print("入队列5个元素1/21/32/45/99")
LQ.EnQueue(1)
LQ.EnQueue(21)
LQ.EnQueue(32)
LQ.EnQueue(45)
LQ.EnQueue(99)
print("链队列的长度为%s" % LQ.LQLength())
print("出队列")
length = LQ.LQLength()
for i in range(length):
print("%s" % LQ.DeQueue(), end=" ")
print()
print("链队列的长度为%s" % LQ.LQLength())
运行结果:
四、总结
链队列完美地解决了循环队列的数组可能会溢出的问题。