头文件
#include<stdio.h>
#include<stdlib.h>
#ifndef LINKQUEUE_H_
#define LINKQUEUE_H_
typedef struct node{
int data;
struct node *next;
}linklist;
typedef struct{
linklist *front;
linklist *real;
}linkq,*linkqP;
void InitQueue(linkqP q);
void SetEmpty(linkqP q);
int IsEmpty(linkqP q);
void InQueue(linkqP q,int x);
int OutQueue(linkqP q,int *x);
linkqP GetQueue(linkqP q);
int Length(linkqP q);
#endif
函数
#include"linkqueue.h"
void InitQueue(linkqP q){
q->front=q->real=(linklist *)malloc(sizeof(linklist));
q->front->next=NULL;
q->real->next=NULL;
}
void SetEmpty(linkqP q){
q->front->next=NULL;
q->front=q->real;
}
int IsEmpty(linkqP q){
return (q->front==q->real)?1:0;
}
void InQueue(linkqP q,int x){
q->real->next=(linklist *)malloc(sizeof(linklist));
q->real = q->real->next;
q->real->data=x;
q->real->next=NULL;
}
int OutQueue(linkqP q,int *x){
if(IsEmpty(q)){
printf("队列为空!");
return 0;
}else{
linklist *s;
s=q->front;
q->front=q->front->next;
//*x=s->next->data;
*x=q->front->data;
free(s);
}
return 1;
}
linkqP GetQueue(linkqP q){
if(IsEmpty(q)){
exit;
}else{
return q->front->data;
}
}
int Length(linkqP q){
if(IsEmpty(q)){
exit;
}else{
return q->real-q->front;
}
}
主函数
#include <stdio.h>
#include <stdlib.h>
#include"linkqueue.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
linkqP q=(linkqP)malloc(sizeof(linkq));
InitQueue(q);
int x;
printf("请输入队列元素(-1退出)");
scanf("%d",&x);
while(x!=-1){
InQueue(q,x);
printf("请输入队列元素(-1退出)");
scanf("%d",&x);
}
int *y=GetQueue(q);
printf("%d\n",*y-1);
printf("队列输出:");
while(!IsEmpty(q)){
OutQueue(q,&x);
printf("%d ",x);
}
return 0;
}