首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法与数据结构之八----链队

算法与数据结构之八----链队

作者头像
用户4148957
发布2022-06-14 08:12:29
发布2022-06-14 08:12:29
1750
举报
文章被收录于专栏:C/C++与音视频C/C++与音视频

/**************************************************************** 文件内容:线性表之链队操作 版本V1.0 作者:HFL 时间:2013-12-22  *****************************************************************/  #include<stdio.h> #include<stdlib.h> //#define RELEASE_VERSION  //release版本开关 //#define TRIDiTION /*inlude<malloc.h> stdlib.h 包含malloc.h*/ #ifdef RELEASE_VERSION #define  Log  #else #define  Log  printf #endif /*为了提高程序的可移植性,千万不能使用裸露的数据类型*/ #ifndef UINT32  typedef unsigned int UINT32 ; #endif #ifndef INT32  typedef  int  INT32 ; #endif typedef struct Node { INT32 data;     struct Node * next; }linksequeue, * LkSq; typedef struct Pointer {   LkSq Rear;   LkSq Front; }Hander; Hander * p = NULL; /**************************************************************** 函数功能:创建一个节点                         输入参数:  无 返回值:节点的指针  作者:HFL  时间:2013-12-22  *****************************************************************/  LkSq Creat_Node(INT32 X) {  LkSq s;       s=(struct Node *)malloc(sizeof(Node));  if(NULL==s) { Log(" sorry,Malloc is failed\n"); } else { Log(" Malloc is successed!\n"); s->data = X; } return s; }  /**************************************************************** 函数功能:初始化链队                        输入参数:  无 返回值: 链队的队顶指针指针  作者:HFL  时间:2013-12-29  *****************************************************************/   LkSq Init_Linkqueue() {       LkSq q = NULL; q = (struct Node *)malloc(sizeof(struct Node)); if(NULL== q) { Log(" sorry,Malloc Node is failed\n"); } p = (struct Pointer *)malloc(sizeof(struct Pointer)); if(NULL== p) { Log(" sorry,Malloc Hander is failed\n"); } p->Front = q; p->Rear = q; q->next = NULL; return q; } /**************************************************************** 函数功能:判断链队是否为空队                        输入参数:  无 返回值: 链队的标头指针  说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是 非法的。 作者:HFL  时间:2013-12-29  *****************************************************************/  INT32 Is_Empty_Linkqueue(Hander * p) {   if ( p->Front == p->Rear)   {  Log("sorry,the linkqueueis NULL");  return 0;   }   else   {     return 1;   } } /**************************************************************** 函数功能: 链队入队                       输入参数:  无 返回值: 链的队的标准指针 说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是 非法的。 作者:HFL  时间:2013-12-29  *****************************************************************/  LkSq FIFO_IN_Linkqueue(INT32 X) { LkSq s; s = Creat_Node(X); p->Rear->next = s; s->next = NULL ; p->Rear = s;     return s;  } /**************************************************************** 函数功能: 链队出队                       输入参数:  无 返回值: 链的队的标准指针 说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是 非法的。 作者:HFL  时间:2013-12-29  *****************************************************************/  INT32  FIFO_OUT_Linkqueue() {   INT32 temp; LkSq s; if(!Is_Empty_Linkqueue(p)) {      return -1; }     temp = p->Front->next->data; //还有节点的头节点需要考虑(头结点的数据域为空) s = p->Front->next;     p->Front->next = p->Front->next->next; free (s); if( NULL == p->Front->next ) { p->Front = p->Rear;  //如果出队列后队列数据为空,收尾指针要修正) } return temp; } /**************************************************************** 函数功能: 链队读前指针元素                       输入参数:  无 返回值: 链的队的头指针指向的元素 说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是 非法的。 出队会修改栈顶指针,而读队前元素,不需修改头指针 作者:HFL  时间:2013-12-29  *****************************************************************/ INT32  Read_Linkstack( ) {   INT32 temp; if(!Is_Empty_Linkqueue(p)) {      return -1; }     temp = p->Front->next->data;     return temp; }  void main() {   INT32 i ; Log("*********************************\n"); Log("*                               *\n"); Log("*   Init Linkqueue is start !   *\n"); Log("*                               *\n"); Log("*********************************\n"); Init_Linkqueue(); Log("********************************\n"); Log("*                               *\n"); Log("*   Into Linkqueue is start !   *\n"); Log("*                               *\n"); Log("*********************************\n");    for(i=0;i<12;i++) { FIFO_IN_Linkqueue(i*2); } Log("*******************************\n"); Log("*                             *\n"); Log("*   Output Linkqueue is start !   *\n"); Log("*                             *\n"); Log("*******************************\n"); for(i=0;i<10;i++) {  Log("The OUTOUT element is %d\n",FIFO_OUT_Linkqueue()); } Log("**************************************\n"); Log("*                                    *\n"); Log("*   Read Linkqueue Front is start !   *\n"); Log("*                                    *\n"); Log("**************************************\n");     Log("The OUTOUT element is %d\n",Read_Linkstack()); }算法与数据结构之八----链队

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档