/* LinkQueue.c*/
/*链接队列:函数实现*/
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct Node;
typedef struct Node *PNode;
struct Node /* 结点结构 */
{
DataType info;
PNode link;
};
struct LinkQueue /* 链接队列类型定义 */
{
PNode f; /* 头指针 */
PNode r; /* 尾指针 */
};
typedef struct LinkQueue *PLinkQueue; /*链接队列类型的指针类型*/
/*创建一个空队列*/
PLinkQueue createEmptyQueue_link( void )
{
PLinkQueue plqu;
plqu = (PLinkQueue )malloc(sizeof(struct LinkQueue));
if (plqu!=NULL)
{
plqu->f = NULL;
plqu->r = NULL;
}
else
printf("Out of space!! \n");
return (plqu);
}
/*判断plqu所指的队列是否为空队*/
int isEmptyQueue_link( PLinkQueue plqu)
{
return (plqu->f==NULL);
}
/*入队运算,往plqu所指的队列中插入一个值为x的元素*/
void enQueue_link( PLinkQueue plqu, DataType x )
{
PNode p;
p=(PNode)malloc( sizeof(struct Node) ); /*申请新结点空间*/
if (p==NULL) printf("Out of space!"); /*申请新结点失败*/
else {p->info=x;
p->link=NULL; /*填写新结点信息*/
if (plqu->f==NULL) plqu->f=p; /*插入前是空队列*/
else plqu->r->link=p; /*将新结点插入*/
plqu->r = p; /*修改对尾指针*/
}
}
/*出队运算,从plqu所指的队列中删除队头元素*/
void deQueue_link( PLinkQueue plqu )
{
PNode p;
if( plqu->f == NULL ) printf( "Empty queue.\n " ); /*队列已空*/
else
{
p = plqu->f;
plqu->f = p ->link; /*修改队头指针*/
free(p); /*释放已经删除结点空间*/
}
}
/*取队列头部元素的值*/
DataType frontQueue_link( PLinkQueue plqu )
{
if( plqu->f == NULL )
{
printf( "Empty queue.\n " ); /*队列已空*/
return -999;
}
else return (plqu->f->info);
}
int main()
{
int i;
PLinkQueue plqu;
printf("建立一空队列\n");
plqu=createEmptyQueue_link();
printf("队列是否空:%d\n",isEmptyQueue_link(plqu));
printf("将1~7元素依次推入队列\n");
for(i=7;i>0;i--)
{
enQueue_link(plqu,i);
}
deQueue_link(plqu);
printf("%d \n",frontQueue_link(plqu));
return 0;
}
数据结构源码笔记(C语言描述)汇总: