// LinkQueue.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#define ElemType int
typedef struct QueueNode{
ElemType data;
struct QueueNode *next;
}QueueNode;
typedef struct LinkQueue{
QueueNode *front;
QueueNode *tail;
}LinkQueue;
void InitQueue(LinkQueue *Q){
QueueNode *s =(QueueNode *)malloc(sizeof(QueueNode));
assert(s!=NULL);
Q->front=Q->tail=s;
Q->tail->next=NULL;
}
void EnQueue(LinkQueue *Q,ElemType x){
QueueNode *s =(QueueNode *)malloc(sizeof(QueueNode));
assert(s!=NULL);
s->data=x;
s->next=NULL;
Q->tail->next=s;
Q->tail =s;
}
void ShowQueue(LinkQueue *Q){
QueueNode *p=Q->front->next;
while(p!=NULL){
printf("%4d",p->data);
p=p->next;
}
printf("<\n");
}
void DeleteQueue(LinkQueue *Q){
if(Q->front==Q->tail)
return;
QueueNode *p=Q->front->next;
Q->front->next=p->next;
if(p==Q->tail)
Q->tail=Q->front;
free(p);
}
void GetHead(LinkQueue *Q,ElemType *v){
if(Q->front==Q->tail)
return;
QueueNode *p=Q->front->next;
*v=p->data;
}
int Length(LinkQueue *Q){
int len=0;
QueueNode *p=Q->front->next;
while(p!=NULL){
len++;
p=p->next;
}
return len;
}
void ClearQueue(LinkQueue *Q){
if(Q->front==Q->tail)
return;
QueueNode *p=Q->front->next;
while(p!=NULL){
Q->front->next=p->next;
free(p);
p=Q->front->next;
}
Q->front=Q->tail;
}
void Destroy(LinkQueue *Q){
ClearQueue(Q);
free(Q->front);
Q->front=Q->tail=NULL;
}
void main(){
ElemType v;
LinkQueue Q;
InitQueue(&Q);
for (int i=1; i <=10; ++i)
{
EnQueue(&Q,i);
}
ShowQueue(&Q);
DeleteQueue(&Q);
ShowQueue(&Q);
GetHead(&Q,&v);
printf("%d\n",v);
printf("len=%d\n",Length(&Q));
}
c语言-链队列
最新推荐文章于 2023-06-14 17:20:39 发布