关闭

数据结构的C实现_链式队列

标签: 数据结构cstruct
631人阅读 评论(0) 收藏 举报
分类:
//编译环境 visual studio 2008,win32 console application.

//LinkQueue.c

//带头节点的链式队列
#include <stdio.h>
#include <stdlib.h>
#define    OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char elemType;//元素类型

typedef struct _QNode
{
elemType data;
struct _QNode *next;
}QNode;//节点类型

typedef struct
{
QNode *front;//
QNode *rear;
}LinkQueue;//队列类型

//初始化队列
int InitQueue(LinkQueue *q)
{
q->front=q->rear=(QNode *)malloc(sizeof(QNode));
if(!q->front) exit(OVERFLOW);
q->front->next=NULL;
return OK;
}
//销毁队列
int DestroyQueue(LinkQueue *q)
{
while(q->front)
{
q->rear=q->front->next;
free(q->front);
q->front=q->rear;
}
return OK;
}
//队尾插入元素e
int EnQueue(LinkQueue *q,elemType e)
{
QNode *p=(QNode *)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
return OK;
}
//删除队头元素,并打印其值
int DeQueue(LinkQueue *q)
{
QNode *p=q->front->next;//因为带头节点,所以队头是头节点的后一个元素
if(q->front==q->rear) return ERROR;
printf("已删除队头元素%c\n",p->data);
q->front->next=p->next;
if(q->rear==p) q->rear=q->front;
free(p);
return OK;
}
//遍历队列
void TraverseQueue(LinkQueue *q)
{
QNode *p=q->front->next;
if(q->front==q->rear)
printf("队列为空\n");
else
{
printf("队列中的元素为:\n");
while(p!=q->rear)
{
printf(" %c",p->data);
p=p->next;
}
printf(" %c",q->rear->data);
printf("\n");
}
}

void main()
{
LinkQueue *q=(LinkQueue *)malloc(sizeof(LinkQueue));
InitQueue(q);
TraverseQueue(q);
printf("队尾插入元素.....\n");
EnQueue(q,'a');
EnQueue(q,'b');
EnQueue(q,'c');
EnQueue(q,'d');
TraverseQueue(q);
printf("删除队首元素...\n");
DeQueue(q);
TraverseQueue(q);
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:175627次
    • 积分:2094
    • 等级:
    • 排名:第18231名
    • 原创:37篇
    • 转载:13篇
    • 译文:0篇
    • 评论:54条
    文章分类
    最新评论