none
关于VS2010旗舰版装不上,用学习版的话运行老出问题,求大神 RRS feed

  • 问题

  • #include<stdio.h>
    #include<stdlib.h>
    typedef int Datatype;
    typedef struct Qnode{

     Datatype data;
     struct Qnode *next;
    }Lqnode,*Pqnode;
    typedef struct{
     Pqnode front;
     Pqnode rear;
    }Linkqueue;
    /////////////////初始化//////////////////////
    int Initqueue(Linkqueue *Q)
    {
     Q=(Linkqueue *)malloc(sizeof(Linkqueue));
     Q->front=Q->rear=(Pqnode)malloc(sizeof(Lqnode));
     if(!Q->front){printf("初始化失败\n");return 0;}
     Q->front->next=NULL;
     return 1;
    }
    ////////////////判断队空/////////////////
    int Queueempty(Linkqueue *Q)
    {
     if(Q->front=Q->rear) return 0;
     else return 1;
    }
    /////////////////////入队/////////
    int Inqueue(Linkqueue *Q,Datatype e)
    {
     Q->rear->next=(Pqnode)malloc(sizeof(Lqnode));
     if(!Q->rear->next){printf("内存分配失败\n");return 0;}
     Q->rear->next->next=NULL;
     Q->rear->next->data=e;
     Q->rear=Q->rear->next;
     return 1;
    }
    /////////////队列中插入元素///////////
     int Enqueue(Linkqueue *Q,Datatype e)
    {
     int a,i;
     Pqnode m,n;
     n=(Pqnode)malloc(sizeof(Lqnode));
     n->data=e;
     m=Q->front;
     printf("输入想要插入的位置:");
     scanf("%d",&a);
     for(i=0;i<=a;i++){m=m->next;}
     n->next=m->next;
     m->next=n; 
     return 1;
    }
    ////////////////删除队中元素/////////
    int Dequeue(Linkqueue *Q,int e)
    {
     Pqnode p1,p2;
     p2=Q->front;
     int i=1;
     int a=Queueempty(Q);
     if(!a){printf("队列已空\n");return 0;}
     p1=Q->front->next;
     while(i!=e)
     {
      if(!p1->next){printf("输入错误");return 0;}
      p1=p1->next;
      p2=p2->next;
      i++;
     }
     p2->next=p1->next;
     if(Q->rear==p1)
      Q->rear=p2;//若删除的是队列中最后的结点,则移动队尾指针
     free(p1);
     return 1;
    }
    //////////////出队列///////////////
    int Outqueue(Linkqueue *Q,int e)
    {
     int i;
     static Pqnode P=Q->front;
     for(i=0;i<=e;i++)
     {
      if(P->next=NULL){printf("队列已空\n");return 0;}
      P=P->next;
      printf("%d",P->data);
     }
     return 1;
    }
    ///////////////销毁队列/////////////
    int Delqueue(Linkqueue *Q)
    {
     int a=Queueempty(Q);
     if(!a){printf("队列已空\n");return 0;}
     Pqnode M;
     M=Q->front->next;
     Pqnode N;
     N=M->next;
     while(M!=Q->rear)
     {
      free(M);
      M=N;
      N=N->next;
     }
     free(M);
     free(Q);
     return 1;
    }
    ///////////主函数/////////////
    int main()
    {
     Linkqueue *Q;
        Initqueue(Q);
     int a=1;
     int b=0;
     do
     {
      scanf("%d",&a);
      Inqueue(Q,a);
      b++;
     }while(a!=0);
     printf("队列长度为:%d",b);
     do{

      printf("请输入你想要的操作:1.队列中插入元素;2.删除链队列中元素;3.出队列;4.销毁队列(此项谨慎选择)");
         scanf("%d",&a); 
      switch(a)
      {
            case '1':
            printf("输入想要插入的元素:");
            scanf("%d",&b);
            Enqueue(Q,b);
            break;
            case '2':
            printf("输入想要删除的位置:");
            scanf("%d",&b);
            Dequeue(Q,b);
            break;
            case '3':
            printf("输入想要出队的长度:");
            scanf("%d",&b);
            Outqueue(Q,b);
            break;
            case '4':
            Delqueue(Q);
         default:
         break;
          }
      
     }while(a==1||a==2||a==3||a==4);
     return 1;
    }

    2011年12月8日 13:28

全部回复