当前位置:编程学习 > C/C++ >>

队列的线性存储结构

这个程序花了我非常大的时间,结果证明书本上的例子没有我这个好,嘿嘿。。。易做图炸天
[cpp]
#include <STDIO.H>  
#include <STDLIB.H>  
typedef int ElemType; 
typedef struct LQNode 

    ElemType data; 
    struct LQNode *next; 
}LqueueNode; 
typedef struct 

    LqueueNode *rear; 
    LqueueNode *front; 
}LinkQueue; 
//初始化  
void InitLQueue(LinkQueue *Q) 

    Q->rear=NULL; 
    Q->front=NULL; 

//入队  
int EnLQueue(LinkQueue *Q,ElemType x) 

    //把数据原色x值插入不带头节点的链队列Q的队尾,入队成功则返回1,否则返回0  
    LqueueNode *p; 
    p=(LqueueNode *)malloc (sizeof(LqueueNode)); 
    p->data=x; 
    p->next=NULL; 
    if(Q->rear==NULL) 
        Q->rear=Q->front=p; 
    else 
    { 
        Q->rear->next=p; 
        Q->rear=p; 
    } 
    return 1; 

//出队  
int DelQueue(LinkQueue *Q,ElemType *x) 

    //删除队列的队头元素,用x返回其值  
    LqueueNode *q; 
    if(Q->front==NULL){ 
        printf("Queue is empty!"); 
        return 0; 
    }    
    *x=Q->front->data; 
    q=Q->front; 
    Q->front=Q->front->next; 
    if(Q->front==NULL) 
        Q->rear=NULL; 
    free(q); 
    return 1;    

void print(LinkQueue Q) 

    //显示队列中的所有元素  
    printf("The queue elements are:\n"); 
    while(Q.front!=Q.rear) 
    { 
        printf("%d",Q.front->data); 
        Q.front=Q.front->next; 
    }  
    printf("%d",Q.rear->data); 
    printf("\n"); 
    /*  if(Q->front==Q->rear)
    printf("空队列,没有元素");
    else{
    printf("该循环队列各元素依次为:");
    for(int k=0;k<QueueLength(Q);k++)
    {
    printf("%d",Q->front->data);
    Q->front=Q->front->next;
    }
}*/ 

 
void main() 

    LinkQueue LQ; 
    int j,x; 
    InitLQueue(&LQ); 
    printf("Input a integer\n"); 
    scanf("%d",&j); 
    while(j!=0) 
    { 
        if(j%2==1) 
            EnLQueue(&LQ,j); 
        else 
            DelQueue(&LQ,&x); 
        print(LQ); 
        printf("Input a integer\n"); 
        scanf("%d",&j);      
    } 

#include <STDIO.H>
#include <STDLIB.H>
typedef int ElemType;
typedef struct LQNode
{
 ElemType data;
 struct LQNode *next;
}LqueueNode;
typedef struct
{
 LqueueNode *rear;
 LqueueNode *front;
}LinkQueue;
//初始化
void InitLQueue(LinkQueue *Q)
{
 Q->rear=NULL;
 Q->front=NULL;
}
//入队
int EnLQueue(LinkQueue *Q,ElemType x)
{
 //把数据原色x值插入不带头节点的链队列Q的队尾,入队成功则返回1,否则返回0
 LqueueNode *p;
 p=(LqueueNode *)malloc (sizeof(LqueueNode));
 p->data=x;
 p->next=NULL;
 if(Q->rear==NULL)
  Q->rear=Q->front=p;
 else
 {
  Q->rear->next=p;
  Q->rear=p;
 }
 return 1;
}
//出队
int DelQueue(LinkQueue *Q,ElemType *x)
{
 //删除队列的队头元素,用x返回其值
 LqueueNode *q;
 if(Q->front==NULL){
  printf("Queue is empty!");
  return 0;
 } 
 *x=Q->front->data;
 q=Q->front;
 Q->front=Q->front->next;
 if(Q->front==NULL)
  Q->rear=NULL;
 free(q);
 return 1; 
}
void print(LinkQueue Q)
{
 //显示队列中的所有元素
 printf("The queue elements are:\n");
 while(Q.front!=Q.rear)
 {
  printf("%d",Q.front->data);
  Q.front=Q.front->next;
 }
 printf("%d",Q.rear->data);
 printf("\n");
 /* if(Q->front==Q->rear)
 printf("空队列,没有元素");
 else{
 printf("该循环队列各元素依次为:");
 for(int k=0;k<QueueLength(Q);k++)
 {
 printf("%d",Q->front->data);
 Q->front=Q->front->next;
 }
}*/
}

void main()
{
 LinkQueue LQ;
 int j,x;
 InitLQueue(&LQ);
 printf("Input a integer\n");
 scanf("%d",&j);
 while(j!=0)
 {
  if(j%2==1)
   EnLQueue(&LQ,j);
  else
   DelQueue(&LQ,&x);
  print(LQ);
  printf("Input a integer\n");
  scanf("%d",&j);  
 }
}

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,