队列
1.先进先出的线性表,有顺序表和链表
2.只允许在一段插入,另一端删除
队列的链式存储结构
和栈相反,队列常用链表实现1
2
3
4
5
6
7
8typedef sruct QNode{
ElemType data;
struct QNode *next;
}QNode,*QueuePrt;
typedef struct {
QueuePrt front; ##队头指针指向链队列的头结点(头结点不是必要的)
QueuePrt rear; ##队尾指针指向终端结点,空队列时,front,rear都指向头结点
}LinkQueue;
入队列
1
2
3
4
5
6
7
8
9
10
11InsertQueue(LinkQueue *q,ElemType e){
QueuePrt p;
p = (QueuePtr)malloc(sizeof(QNode));
if(p==NULL){
exit(0);
}
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
出队列
1
2
3
4
5
6
7
8
9
10
11
12
13
14DeleteQueue(LinkQueue *q,ElemType e){
QueuePrt p;
if(q->front ==q->rear)
{
retrun;
}
p=q->front->next;
*e=p->data;
q->front->next = p->next;
if(q->rear ==p){
q->rear = q->front;
}
free(p);
}
销毁一个队列
由于链队列建立在内存的动态区,因此当一个队列
不在有用时,应当及时销毁掉,以免过多占用内存空间1
2
3
4
5
6
7DestroyQueue(LinkQueue *q){
while(q->front){
q->rear = q->front->next;
free(q->front):
q->front = q->rear;
}
}
简单实现1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20var list = [];
for(var i=0;i<5;i++){
list.push({
next:i+1
})
}
list[4].next = null;
console.log(list);
//入队列
var length = list.length;
list.push({
next:null
})
list[length-1].next=length;
console.log(list);
//出队列
list.splice(0,1);
console.log(list);
//清空
list=[];