#include "stdio.h"
#include "stdlib.h"
typedef char datatype; typedef struct LNode{
datatype data;
struct LNode *next;
}QType; //对头尾指针
typedef struct{
QType *front;
QType *rear;
}Linkqueue;
void InitQueue(Linkqueue *qu)//初始化队列
{ QType *s;
qu=(Linkqueue * )malloc(sizeof(Linkqueue));
s=(QType *)malloc(sizeof(QType));
s->next=NULL;
qu->rear=qu->front=s;
}
int Enqueue(Linkqueue *qu, datatype x)
{ QType *s;
s=(struct LNode * )malloc(sizeof(QType));
s->data=x;s->next =NULL;
if(qu->rear==qu->front)
qu->rear=qu->front->next=s;
else
{
qu->rear->next=s;
qu->rear=s;
}
return 1;
}
int DeQueue(Linkqueue *sq, datatype *x)//出对运算算法
{ QType *p;
if(sq->rear==NULL&&sq->front==NULL)
return 0;
p=sq->front;
*x=p->data;
if(sq->rear==sq->front) //只有一个结点
sq->rear=sq->front=NULL;
else
{sq->front=sq->front->next;
free(p);
}
return 1;
}
int GetHead(Linkqueue *sq, datatype *x)//取对头元素运算方法
{if(sq->rear==sq->front)
return 0;
*x=sq->front->data;
return 1;
}
int QueueEmpty(Linkqueue sq){//判断是否为空
if(sq.rear==sq.front)
return 1;
else
return 0;} void Traversal_SqQueue(Linkqueue q){
QType *t;t=q.front->next;
while(t)
{
printf("%c",t->data);t=t->next;
}printf("\n");} //遍历
void main()
{Linkqueue sq; int i=0;datatype a[]="abcdefgh",x,*e=NULL,*h=NULL;
InitQueue(&sq);
while(a[i])
{
if(Enqueue(&sq,a[i]))
printf("入队失败.\n");
i++;}
printf("队列的初始状态为:\n");
Traversal_SqQueue(sq);
if(!(DeQueue(&sq, e)))
printf("出队失败。\n");
else
printf("%c出队后,队列为:\n",x);
Traversal_SqQueue(sq);
x='f';
{if(!(Enqueue(&sq,x)))
printf("入队失败.\n");
else
printf("%c入队后,队列为:\n",x);
Traversal_SqQueue(sq);
if(!(DeQueue(&sq,e)))
printf("出队失败\n");
else
printf("%c出队后,队列为:\n", *e);
Traversal_SqQueue(sq);} if(!(GetHead(&sq, h)))
printf("队空。\n");
else
printf("取队头元素%c后,队列为:\n",*h);
Traversal_SqQueue(sq);
}
#include "stdlib.h"
typedef char datatype; typedef struct LNode{
datatype data;
struct LNode *next;
}QType; //对头尾指针
typedef struct{
QType *front;
QType *rear;
}Linkqueue;
void InitQueue(Linkqueue *qu)//初始化队列
{ QType *s;
qu=(Linkqueue * )malloc(sizeof(Linkqueue));
s=(QType *)malloc(sizeof(QType));
s->next=NULL;
qu->rear=qu->front=s;
}
int Enqueue(Linkqueue *qu, datatype x)
{ QType *s;
s=(struct LNode * )malloc(sizeof(QType));
s->data=x;s->next =NULL;
if(qu->rear==qu->front)
qu->rear=qu->front->next=s;
else
{
qu->rear->next=s;
qu->rear=s;
}
return 1;
}
int DeQueue(Linkqueue *sq, datatype *x)//出对运算算法
{ QType *p;
if(sq->rear==NULL&&sq->front==NULL)
return 0;
p=sq->front;
*x=p->data;
if(sq->rear==sq->front) //只有一个结点
sq->rear=sq->front=NULL;
else
{sq->front=sq->front->next;
free(p);
}
return 1;
}
int GetHead(Linkqueue *sq, datatype *x)//取对头元素运算方法
{if(sq->rear==sq->front)
return 0;
*x=sq->front->data;
return 1;
}
int QueueEmpty(Linkqueue sq){//判断是否为空
if(sq.rear==sq.front)
return 1;
else
return 0;} void Traversal_SqQueue(Linkqueue q){
QType *t;t=q.front->next;
while(t)
{
printf("%c",t->data);t=t->next;
}printf("\n");} //遍历
void main()
{Linkqueue sq; int i=0;datatype a[]="abcdefgh",x,*e=NULL,*h=NULL;
InitQueue(&sq);
while(a[i])
{
if(Enqueue(&sq,a[i]))
printf("入队失败.\n");
i++;}
printf("队列的初始状态为:\n");
Traversal_SqQueue(sq);
if(!(DeQueue(&sq, e)))
printf("出队失败。\n");
else
printf("%c出队后,队列为:\n",x);
Traversal_SqQueue(sq);
x='f';
{if(!(Enqueue(&sq,x)))
printf("入队失败.\n");
else
printf("%c入队后,队列为:\n",x);
Traversal_SqQueue(sq);
if(!(DeQueue(&sq,e)))
printf("出队失败\n");
else
printf("%c出队后,队列为:\n", *e);
Traversal_SqQueue(sq);} if(!(GetHead(&sq, h)))
printf("队空。\n");
else
printf("取队头元素%c后,队列为:\n",*h);
Traversal_SqQueue(sq);
}
