【数据结构】链式队列的基本操作

来源:互联网 发布:qt4.8.4 源码下载 编辑:程序博客网 时间:2024/04/30 07:01

#include "stdafx.h"

#include<stdio.h>

#include<stdlib.h>

#define LEN sizeof(struct Node)

#define OK 1

#define ERROR 0

typedef int QElemType;

 

 

//定义QNode为指针类型

typedef struct QNode{

    QElemType data;

    structQNode *next;

}*QueuePtr;

 

 

//front\rear为QNode的指针

typedef struct{

    QueuePtr front;

    QueuePtr rear;

}LinkQueue;

 

 

//输出当前队列

int Queue_print(LinkQueue& Q)

{  

    QueuePtr p;

    p=Q.front;

    printf("当前的队列为:\n");

    while(p->next!=NULL)

    {

       p=p->next;

       printf("%d ",p->data);

    }

    printf("\n");

    returnOK;

}

 

 

//建立空队列与入队的合并

int InitQueue(LinkQueue& Q,intt)

{

  Q.front = Q.rear=(QueuePtr)malloc(sizeof(QNode));

  if(!Q.front)return ERROR;

  Q.front->next = NULL;

  QueuePtr q;

  inti;

  for(i=1;i<=t;i++)

  {printf("请输入第%d个入队元素\n",i);

      q=(QueuePtr)malloc(sizeof(QNode));

     scanf("%d",&q->data);

     Q.rear->next = q;

     Q.rear = q;

     Q.rear->next=NULL;}

  Queue_print(Q); 

  returnOK;

}

 

 

//元素入队

int Queue_Input(LinkQueue& Q)

{

    QueuePtr p;

    p=(QueuePtr)malloc(sizeof(QNode));

    printf("请输入一个入队元素\n");

    scanf("%d",&p->data);

    Q.rear->next=p;

    p->next=NULL;

    Q.rear=p;

    Queue_print(Q);

    returnOK;

}

 

//元素出队

int Queue_Output(LinkQueue& Q)

{

    QueuePtr p;

    p=Q.front->next;

    Q.front->next=p->next;

    if(Q.rear==p)Q.rear=Q.front;

    printf("首元素%d 出队\n",p->data);

    free(p);

    Queue_print(Q);

    returnOK;

}

 

//查找队元素

int Seek(LinkQueue& Q,int t)

{

    inti=1;

    QueuePtr p;

    p=Q.front;

    while(p->next!=NULL)

    {p=p->next;

    if(t==p->data)

       printf("这是第%d个元素\n",i);

    elseprintf("这不是第%d个元素\n",i,t);

    i++;

    }

    returnOK;

}

 

//元素排队

int  Queue_Order(LinkQueue&Q)

{

    inttemp;

    QueuePtr p,q;

    for(p=Q.front->next;p->next!=NULL;p=p->next)

    {for(q=p->next;q->next!=NULL;q=q->next)

           if(p->data>q->data)

           {temp=p->data;p->data=q->data;q->data=temp;}}

    Queue_print(Q);

    returnOK;

}

 

 

//主函数

void main()

{

    LinkQueue Q;

    intt;

    printf("请一步步按照提示操作 (@_@) 绝对给力!!!\n");

    printf("请输入要入队元素的个数:\n");

    scanf("%d",&t);

    InitQueue(Q,t);

    intflag=1,select;

    printf("====================菜单===========================\n");

    printf("=               1.元素入队                       =\n");

    printf("=               2.元素出队                       =\n");

    printf("=               3.查找队元素                     =\n");

    printf("=               4.排队啦                         =\n");

    printf("=               5.退出操作                       =\n");

    printf("================支持乱序选择=======================\n");

    while(flag){

       printf("\n请选择菜单中的操作选项:\n");

       scanf("%d",&select);

       switch(select)

       {

       case1:

           Queue_Input(Q);break;

       case2:

           Queue_Output(Q);break;

       case3:

           printf("请输入要查找的队中元素(显示它的位置是第几个):\n");

           scanf("%d",&t);

           Seek(Q,t);break;

       case4:

           printf("给队列元素按递增顺序排队\n");

            Queue_Order(Q);break;

       case5:

           flag=0;break;

        default:printf("您输入的数据有误!\n");

       }

 

    }

   

}

 

 

0 0
原创粉丝点击