当前位置: 首页 > news >正文

湖北网站制作公司建设网站企业邮箱

湖北网站制作公司,建设网站企业邮箱,绵阳网络推广公司,网站互动推广1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入#xff0c;而在另一端删除元素。 2. 示例代码 1#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果…1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入而在另一端删除元素。 2. 示例代码 1status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASIABLE 2 /* 返回值未知 */ #define ERR_MEMORY 3 /* 访问内存错 */ #define ERR_NULL_PTR 4 /* 空指针错误 */ #define ERR_MEMORY_ALLOCATE 5 /* 内存分配错 */ #define ERR_NULL_STACK 6 /* 栈元素为空 */ #define ERR_PARA 7 /* 函数参数错 */ #define ERR_OPEN_FILE 8 /* 打开文件错 */ #define ERR_NULL_QUEUE 9 /* 队列为空错 */ typedef int Status; /* Status 是函数的类型,其值是函数结果状态代码如 OK 等 */ typedef int Bollean; /* Boolean 是布尔类型,其值是 TRUE 或 FALSE */#endif // !STATUS_H 2) linkQueue.h /* 单链队列 —— 队列的链式存储结构头文件 */#ifndef LINKQUEUE_H #define LINKQUEUE_H#include status.htypedef int QElemType;typedef struct QNode {QElemType data;struct QNode *next; } QNode, *QueuePtr;typedef struct {QueuePtr front, rear; } LinkQueue;/* 构造一个空队列 Q */ Status InitQueue(LinkQueue *Q);/* 销毁队列 Q(无论空否均可) */ Status DestroyQueue(LinkQueue *Q);/* 将 Q 清为空队列 */ Status ClearQueue(LinkQueue *Q);/* 若 Q 为空队列,则返回 TRUE,否则返回 FALSE */ Bollean QueueEmpty(const LinkQueue *Q);/* 求队列的长度 */ int QueueLength(LinkQueue *Q);/* 若队列不空,则用 e 返回 Q 的队头元素,并返回 OK, 否则返回 ERROR */ Status GetQueueHead(const LinkQueue *Q, QElemType *e);/* 插入元素 e 为 Q 的新的队尾元素 */ Status EnQueue(LinkQueue *Q, QElemType e);/* 若队列不空,删除 Q 的队头元素,用 e 返回其值,并返回 OK, 否则返回 ERROR */ Status DeQueue(LinkQueue *Q, QElemType *e);/* 从队头到队尾依次对队列 Q 中每个元素调用函数 vi() */ Status QueueTraverse(const LinkQueue *Q, void(*vi)(QElemType));#endif // !LINKQUEUE_H3) linkQueue.c /* 单链队列 —— 队列的链式存储结构源文件 */#include linkQueue.h #include stdio.h #include stdlib.h/* 构造一个空队列 Q */ Status InitQueue(LinkQueue *Q) {Q-front Q-rear (QueuePtr)malloc(sizeof(QNode));if (!Q-front) {printf(FuncName: %-15s Line: %-5d ErrorCode: %-3d\n, __func__, __LINE__, ERR_MEMORY_ALLOCATE);return ERR_MEMORY_ALLOCATE;}Q-front-next NULL;return RET_OK; }/* 销毁队列 Q(无论空否均可) */ Status DestroyQueue(LinkQueue *Q) {while (Q-front) {Q-rear Q-front-next;free(Q-front);Q-front Q-rear;}return RET_OK; }/* 将 Q 清为空队列 */ Status ClearQueue(LinkQueue *Q) {Q-rear Q-front;QueuePtr p Q-front-next;Q-front-next NULL;QueuePtr q NULL;while (p) {q p;p p-next;free(q);}return RET_OK; }/* 若 Q 为空队列,则返回 TRUE,否则返回 FALSE */ Bollean QueueEmpty(const LinkQueue *Q) {return (Q-front Q-rear) ? TRUE : FALSE; }/* 求队列的长度 */ int QueueLength(LinkQueue *Q) {int length 0;QueuePtr p Q-front;while (p ! Q-rear) {length;p p-next;}return length; }/* 若队列不空,则用 e 返回 Q 的队头元素(队头元素为 front 的下一个元素), 并返回 OK, 否则返回 ERROR */ Status GetQueueHead(const LinkQueue *Q, QElemType *e) {if (Q-front Q-rear) {printf(FuncName: %-15s Line: %-5d ErrorCode: %-3d\n, __func__, __LINE__, ERR_NULL_QUEUE);return ERR_NULL_QUEUE;}*e Q-front-next-data;return RET_OK; }static QueuePtr MakeNewQueueNode(QElemType e) {QueuePtr p (QueuePtr)malloc(sizeof(QNode));if (!p) {printf(FuncName: %-15s Line: %-5d ErrorCode: %-3d\n, __func__, __LINE__, ERR_MEMORY_ALLOCATE);return NULL;}p-data e;p-next NULL;return p; }/* 插入元素 e 为 Q 的新的队尾元素 */ Status EnQueue(LinkQueue *Q, QElemType e) {QueuePtr p MakeNewQueueNode(e);if (p NULL) {printf(FuncName: %-15s Line: %-5d ErrorCode: %-3d\n, __func__, __LINE__, ERR_NULL_PTR);return ERR_NULL_PTR;}Q-rear-next p;Q-rear p;return RET_OK; }/* 若队列不空,删除 Q 的队头元素,用 e 返回其值,并返回 OK, 否则返回 ERROR */ Status DeQueue(LinkQueue *Q, QElemType *e) {if (Q-front Q-rear) {printf(FuncName: %-15s Line: %-5d ErrorCode: %-3d\n, __func__, __LINE__, ERR_NULL_QUEUE);return ERR_NULL_QUEUE;}QueuePtr p Q-front-next;*e p-data;Q-front-next p-next;if (Q-rear p) {Q-rear Q-front;}free(p);return RET_OK; }/* 从队头到队尾依次对队列 Q 中每个元素调用函数 vi() */ Status QueueTraverse(const LinkQueue *Q, void(*vi)(QElemType)) {QueuePtr p Q-front-next;while (p) {vi(p-data);p p-next;}return RET_OK; } 4) auxiliary.h /* 辅助函数头文件 */#ifndef AUXILIARY_H #define AUXILIARY_H#include linkQueue.h/* 打印栈元素 */ void Print(QElemType e);#endif // !AUXILIARY_H 5) auxiliary.c /* 辅助函数实现源文件 */#include auxiliary.h #include stdio.h/* 打印栈元素 */ void Print(QElemType e) {printf(%d , e); } 6) main.c /* 入口程序源文件 */#include status.h #include auxiliary.h #include linkQueue.h #include stdio.hint main(void) {LinkQueue Q;Status ret InitQueue(Q);if (ret RET_OK) {printf(Initialize queue success!\n);}printf(The queue is %s\n, (QueueEmpty(Q) TRUE) ? empty : not empty);printf(The length of the queue is %d\n, QueueLength(Q));EnQueue(Q, -5);EnQueue(Q, 5);EnQueue(Q, 10);printf(After insert 3 elements, the length of the queue is %d\n, QueueLength(Q));printf(The queue is %s\n, (QueueEmpty(Q) TRUE) ? empty : not empty);printf(The elements of the queue is: );QueueTraverse(Q, Print);printf(\n);QElemType e;ret GetQueueHead(Q, e);if (ret RET_OK) {printf(The element of the head of the queue is %d\n, e);}DeQueue(Q, e);printf(Delete the element of the head of the queue %d\n, e);ret GetQueueHead(Q, e);if (ret RET_OK) {printf(The new element of the head of the queue is %d\n, e);}ClearQueue(Q);printf(After clear the queue, Q.front %p, Q.rear %p, Q.front-next %p\n,Q.front, Q.rear, Q.front-next);DestroyQueue(Q);printf(After destroy the queue, Q.front %p, Q.rear %p\n, Q.front, Q.rear);return 0; } 3. 输出示例 注意free() 函数的作用并不仅仅把内存释放还将指针置为空。
http://www.dnsts.com.cn/news/278757.html

相关文章:

  • 佛山市建设企业网站服务机构站外推广策划书
  • 信息管理网站开发的视频教程建站哪家好就要用兴田德润
  • 大型网站 cms项目经理证书
  • 湖北省建设厅建筑资料官方网站广东南电建设集团网站
  • 合肥住房和城乡建设部网站wordpress的登录
  • 咋把网站制作成软件亚马逊购物官网入口
  • 动漫网站设计与实现中投中原建设有限公司官方网站
  • 做卖衣服网站源代码江门网站推广多少钱
  • 如何设置网站标题合肥网站设计 goz
  • 做宠物网站需要实现什么功能seo是什么意思怎么读
  • 内网做网站泸州做网站的公司
  • 网站横幅怎么更换网络公司经营范围许可
  • 免费网站建站下载哈尔滨网络推广专员
  • 深圳网站建设 site如何制造一个网站
  • 吉林网站建设费用网站推广公司有哪些
  • 广州企业网站建设报价旅游网站开发现状
  • 郑州企业型网站建设十大小程序开发公司
  • 江阴做网站的企业建个网站做产品怎样
  • 网站建设丿金手指15深圳中小企业网站制作
  • 临海企业网站建设公司住房和城乡建设部政务服务门户
  • 湘西做网站做微网站必须要有公众号吗
  • 家政类网站开发成本网站推广方案的构成
  • 重庆免费网站推广软件优秀的设计网站推荐
  • 制作网站要花多少钱wordpress 拍卖 主题
  • 网站设计证书重庆九龙坡营销型网站建设公司哪家好
  • php网站本地搭建上海知名的网站建设公司
  • 网站官网认证加v怎么做用哪个网站做首页比较好
  • 企业门户网站建设方案后台管理王占山 同济大学
  • 滁州做网站的竞价账户托管的公司有哪些
  • 搭建自己的网站需要什么导航页面wordpress代码