#include stdio.h#include stdlib.h#define OK 1;#define ERROR 0;#define OVERFLOW 0; #define TURE 1;#define FALSE 0;typedef int Status;typedef char QElemType; //队型数据 //链队中结点的定义typ...
#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define ERROR 0;
#define OVERFLOW 0;
#define TURE 1;
#define FALSE 0;
typedef int Status;
typedef char QElemType; //队型数据
//链队中结点的定义
typedef struct QNode {
QElemType data; //数据域
struct QNode *next; //指针域
}QNode,*QueuePtr;
//链队的定义
typedef struct {
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//链队的初始化
Status InitQueue(LinkQueue *queue){
queue->front=queue->rear=(QueuePtr)malloc(sizeof(QNode));
if(!queue->front) return OVERFLOW;
queue->front->next=NULL; //头结点next域置空
return OK;
}
//链队的销毁
Status DestroyQueue(LinkQueue *queue){
QNode *p;
while(queue->front){
p=queue->front->next;
free(queue->front);
queue->front=p;
}
return OK;
}
//元素入队
Status EnQueue(LinkQueue *queue,QElemType elem){
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) return OVERFLOW;
p->data=elem;
p->next=NULL;
queue->rear->next=p;
queue->rear=p;
return OK;
}
//元素出队
Status DeQueue(LinkQueue *queue,QElemType *elem){
if(queue->front==queue->rear) return ERROR;
QueuePtr p=queue->front->next; //p指向首元(队头元素)
*elem=p->data; //出队元素的值保存到elem
queue->front->next=p->next;
if(p==queue->rear) queue->rear=queue->front; //如果出队的是最后一个元素
free(p);
return OK;
}
//取队头元素
QElemType GetHead(LinkQueue queue){
if(queue.front==queue.rear) return ERROR;
return queue.front->next->data;
}
int main(void){
LinkQueue queue1; //定义一个链队
//初始化
Status initQueueResult = InitQueue(&queue1);
printf("队列queue1初始化结果:%d\n",initQueueResult);
//元素入队
QElemType elem1='Y',elem2='C';
Status enResult = EnQueue(&queue1,elem1);
printf("入队执行结果:%d\n",enResult);
EnQueue(&queue1,elem2); //将elem2也入队
printf("队尾元素值:%c\n",queue1.rear->data);
//元素出队
QElemType elem3; //出队的数据放入elem3
Status deResult = DeQueue(&queue1,&elem3);
printf("出队执行结果:%d\n",deResult);
printf("出队元素值:%c\n",elem3);
printf("队尾元素值:%c\n",queue1.rear->data);
//取队头元素
QElemType queueHeadValue = GetHead(queue1);
printf("获取队头元素值:%c\n",queueHeadValue);
//链队销毁
Status destroyResult = DestroyQueue(&queue1);
printf("链队销毁结果:%d\n",destroyResult);
printf("\nEND");
return 0;
}

沃梦达教程
本文标题为:队列的链式表示和实现(C语言)
猜你喜欢
- Qt计时器使用方法详解 2023-05-30
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C语言qsort()函数的使用方法详解 2023-04-26
- ubuntu下C/C++获取剩余内存 2023-09-18
