分享
 
 
 

用循环单链表实现队列的基本操作

王朝c/c++·作者佚名  2006-01-06
窄屏简体版  字體: |||超大  

作者: 文竹         出自:  vczx.com

//用循环单链表实现队列的基本操作

//算法的实现:

#include

#include

#include

typedef int DateType;

struct Node;

typedef struct Node *PNode;

struct Node//结点结构

{

DateType info;

PNode link;

};

//函数声明

int isEmptyQueue_link(PNode &p);

void enQueue_link(PNode &p,DateType x);

void deQueue_link(PNode &p);

DateType frontQueue_link(PNode &p);

void scan_link(PNode &p);

//主函数

void main()

{

  PNode head=NULL;

  int i=1,x,y;

while(i)

{

printf("**********************************************************************\n");

printf("请选择:1 判断队列是否为空 2 进队列 3 出队列 4 取队列头部元素的值\n");

printf("        5 遍历队列 0 退出程序\n");

printf("**********************************************************************\n");

   scanf("%d",&i);

  switch(i)

    {case 1:y=isEmptyQueue_link(head);

            if(y==1)

       printf("队列为空!\n");

      else printf("队列非空!\n");

      break;

        case 2:printf("请你输入进队列的元素值: ");

      scanf("%d",&x);

      enQueue_link(head,x);

      break;

  case 3:deQueue_link(head);

      break;

  case 4:y=frontQueue_link(head);

      if(y!=65535)

      printf("队列头部元素的值为:%d\n",y);

      break;

  case 5:scan_link(head);

      break;

  

  default:if(i!=0)

       printf("选择有错!请你重新选择!\n");

  }        

}

}

int isEmptyQueue_link(PNode &p)//判断队列是否为空

{

return(p==NULL);

}

void enQueue_link(PNode &p,DateType x)//入队列

{

        PNode flag=NULL;//flag 始终指向第一个结点

        PNode q=NULL;

if(p==NULL)//创建第一个结点

{if((p=(PNode)malloc(sizeof(struct Node)))==NULL)

              printf("空间分配失败!\n");

  p->info=x;

  p->link=p;//头指针p 始终指向尾结点

  flag=p;

}

else //创建其他结点

               {   flag=p->link;//在改变头指针指向前使flag始终保持指向首结点

                  q=p;

      if((p=(PNode)malloc(sizeof(struct Node)))==NULL)

              printf("空间分配失败!\n");

        p->info=x;

          q->link=p;

          p->link=flag;}

}

void deQueue_link(PNode &p)//出队列

{

PNode q;

if(p==NULL)

  printf("队列为空的!\n");

else

   if(p->link==p)//只有一个结点的删除处理

   {free(p);

   p=NULL;}

   else //两个或者两个以上结点的时候的删除处理

   {    q=p->link;

        p->link=p->link->link;

        free(q);

                  

   }

}

DateType frontQueue_link(PNode &p)//取队列头部元素值

{

if(p==NULL)

{printf("队列是空的!\n");

  return 65535;//返回一个特殊值

}

else return(p->link->info);

}

void scan_link(PNode &p)//遍历队列

{

PNode q;

int i=1;

    if(p==NULL)

      printf("队列是空的!\n");  

else

{   for(q=p->link;q!=p;q=q->link)

  printf("第%d个元素是 %d\n",i++,q->info);

     printf("第%d个元素是 %d\n",i++,q->info);

}

}

//

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有