首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C语言经典算法之队列

C语言经典算法之队列

#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define Q (*qe)
struct quenode
{
         ElemTypedata;
         structquenode *next;
}*p,*s,*h;
struct quefr
{
         structquenode *front,*rear;
};
main()
{
         structquefr *que;
         intx,cord;
         voidOutlin(struct quefr qq);
         voidcreat(struct quefr *qe);
         voidinsert(struct quefr *p,ElemType x);
         ElemTypedeletes(struct quefr *qe);
         do
         {
                   printf("\n");
                   printf("           主菜单           \n");
                   printf("      1   建立链表队列     \n");
                   printf("      2    入队一个元素     \n");
                   printf("      3   出队一个元素     \n");
                   printf("      4   结束程序运行     \n");
                   printf("-------------------------------\n");
                   printf("请输入您的选择(1, 2,3, 4) ");
                   scanf("%d",&cord);
                   switch(cord)
                   {
                            case1:
                                     {
                                               que=(structquefr *)malloc(sizeof(struct quefr));
                                               creat(que);
                                               Outlin(*que);
                                     }break;
                            case2:
                                     {
                                               printf("x=?");
                                               scanf("%d",&x);
                                               insert(que,x);
                                               Outlin(*que);
                                     }break;
                            case3:
                                     {
                                               printf("x=%d\n",deletes(que));
                                               Outlin(*que);
                                     }break;
                            case4:
                                     {
                                               exit(0);
                                     }
                   }
         }while(cord<=4);
}
void Outlin(struct quefr qq)
{
         p=qq.front->next;      /*指向第一个数据元素节点 */
         while(p!=NULL)
         {
                   printf("data=%d\n",p->data);
                   p=p->next;
         }
         printf("\noutend \n");
}
void insert(struct quefr *qe,int x)/*入队x值的节点*/
{
         s=(structquenode *)malloc(sizeof(struct quenode));
         s->data=x;
         s->next=NULL;
         Q.rear->next=s;
         Q.rear=s;
}
ElemType deletes(struct quefr *qe)
{
         ElemTypex;
         if(Q.front==Q.rear)
         {
                   printf("队列为空。\n");
                   x=0;
         }
         else
         {
                   p=Q.front->next;
                   Q.front->next=p->next;
                   if(p->next==NULL)
                            Q.rear=Q.front;
                   x=p->data;
                   free(p);
         }
         return(x);
}
void creat(struct quefr *qe)
{
         inti,n,x;
         printf("n=");
         scanf("%d",&n);
         h=(structquenode*)malloc(sizeof(struct quenode));
         h->next=NULL;
         Q.front=h;
         Q.rear=h;
         for(i=1;i<=n;i++)
         {
                   scanf("%d",&x);
                   insert(qe,x);
         }
}
返回列表