数据结构——链式队列
来源:互联网 发布:淘宝网怎么装修 编辑:程序博客网 时间:2024/06/06 05:20
头文件:
#ifndef __LINKQUEUE_H__#define __LINKQUEUE_H__#include "error.h"#define TRUE 1#define FALSE 0typedef int QueueData;typedef struct _node{ QueueData data; struct _node *next;}Node;typedef struct _queue{ Node *front; Node *rear;}Queue;Queue* Create_Queue();int QueueEmpty (Queue *Q); // 进队int EnQueue (Queue *Q, QueueData x); // 出队int DeQueue (Queue *Q, QueueData *x);// 取队头int GetFront (Queue *Q, QueueData *x);int Destroy_Queue (Queue *Q);#endif // __LINKQUEUE_H__
错误信息头文件:
#ifndef __ERROR_H__#define __ERROR_H__#include <stdio.h>#define ERROR -1#define FULL_STACK -2#define EMPTY_STACK -3#define MALLOC_ERROR -4#define FULL_QUEUE -5#define EMPTY_QUEUE -6int errno; // 错误号void myError(char *str);char* myStrError(int num);#endif // __ERROR_H__
输出错误信息函数:
#include "error.h"void myError(char *str){ char *msg = myStrError(errno); printf ("%s: %s\n", str, msg);}char* myStrError(int num){ switch (errno) { case ERROR: return "输入参数错误"; case FULL_STACK: return "满栈状态"; case EMPTY_STACK: return "空栈状态"; case MALLOC_ERROR: return "空间分配失败"; case FULL_QUEUE: return "队满状态"; case EMPTY_QUEUE: return "队空状态"; }}
功能函数:
#include "LinkQueue.h"#include <stdlib.h>Queue* Create_Queue(){ Queue * q = (Queue*)malloc(sizeof(Queue)/sizeof(char)); if (q == NULL) { errno = MALLOC_ERROR; return NULL; } // 置空队 q->front = NULL; q->rear = NULL; return q;}int QueueEmpty (Queue *q){ if (q == NULL) { errno = ERROR; return FALSE; } return q->front == NULL;}int EnQueue (Queue *q, QueueData x){ if (q == NULL) { errno = ERROR; return FALSE; } Node * node = (Node*)malloc(sizeof(Node)/sizeof(char)); if (node == NULL) { errno = MALLOC_ERROR; return FALSE; } node->data = x; node->next = NULL; if (q->front == NULL) { q->front = node; q->rear = node; } else { q->rear->next = node; q->rear = node; } return TRUE;}int DeQueue (Queue *q, QueueData *x){ if (q == NULL) { errno = ERROR; return FALSE; } if (QueueEmpty(q)) { errno = EMPTY_QUEUE; return FALSE; } Node *p = q->front; *x = p->data; q->front = p->next; free(p); if (q->front == NULL) q->rear = NULL; return TRUE;}int GetFront (Queue *q, QueueData *x){ if (q == NULL) { errno = ERROR; return FALSE; } if (QueueEmpty(q)) { errno = EMPTY_QUEUE; return FALSE; } *x = q->front->data; return TRUE;}int Destroy_Queue (Queue *q){ if (q == NULL) { errno = ERROR; return FALSE; } int x; while (QueueEmpty(q) != TRUE) { DeQueue(q, &x); } free(q); return TRUE;}
main函数:
#include "LinkQueue.h"#include <stdio.h>int main(){ Queue* q = Create_Queue(); int i; char str[50]; for (i = 0; i < 10; i++) { if (EnQueue(q, i) != TRUE) { sprintf (str, "第 %d 个元素入队失败", i); myError(str); } } int x; for (i = 0; i < 10; i++) { if (DeQueue(q, &x) != TRUE) { sprintf (str, "第 %d 个元素出队失败", i); myError(str); } printf ("x = %d\n", x); } return 0;}
阅读全文
0 0
- 数据结构——链式队列
- 数据结构——链式队列(c++)
- 数据结构——队列之链式存储
- C++——数据结构之 顺序队列 链式队列?
- 【数据结构-队列】链式队列
- 数据结构——队列的链式实现(C语言)
- 数据结构——队列的链式存储结构以及实现
- 数据结构之线性表——队列的链式存储
- 第九篇:基本数据结构——队列的链式表示
- 数据结构——链式队列模板类实现
- 数据结构单链队列——链式存储实现
- 数据结构六—队列的链式存储结构
- 数据结构—队列的顺序和链式存储
- 数据结构——队列、循环队列、链式队列主要操作函数的实现
- 数据结构(五)——双链表、链式栈、链式队列 及实现
- 数据结构(三)——双链表、链式栈、链式队列 及实现
- 链式队列(数据结构C#)
- 【数据结构】链式队列 Linked_queue
- 安卓开发之把布局转换成图片,再把图片保存至本地,踩坑后至终极解决方案
- Counting Divisors HDU
- JavaScript中的this
- Web报表系统葡萄城报表:自由报表
- 输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7输出: -3 -1 2.1 5 7
- 数据结构——链式队列
- cookie 和session 的区别详解
- 以字节码通信时的乱码
- Android 开发之干货推荐
- 操作符函数及重载(2)
- QQ物联对接
- 如何在报表中实现数据预警
- 如何运行vue项目
- 重启HDFS报错