链式对列

#include<stdio.h>
#include<stdlib.h>
int  main()

struct   Node
{
     int   data;
     struct    Node *next;
};

/*创建结点的过程,为入队做准备*/
struct   Node *createNode(int   data)
{
       struct    Node* newNode = (struct    Node*)malloc(sizeof(struct    Node));
       newNode->data = data;
       newNode->next = NULL;
       return   newNode;
}



/*队列的属性:队头和队尾      万金油参数:size*/
struct    queue
{
      int    sizeQueze;
      //链式结构实现:结构体指针
      struct   Node* frontNode;/*队头指针指向头结点*/
      struct   Node* tailNode;/*队尾指针指向尾结点*/
};



/*使用一个东西表示整个队列,先描述最初的状态*/
struct     queue* createQueue()
{
      struct    Queue* lpqueue = (struct    Queue*)malloc(sizeof(struct    lpQueue));
      lpQueue->sizeQueue = 0;
      lpQueue->frontNode = lpQueue->tailNode = NULL;
      return    lpQueue;   
}



/*万金油函数:万金油参数*/
int    size(struct    queue* lpQueue)
{
       return   lpQueue->sizeQueue;
}
/*返回 1 表示为空,返回 0 ,表示不为空*/
int     empty(struct     queue* lpQueue)
{
    return     lpQueue->sizeQueue == 0;
}


/*入队操作,相当于无头链表再封装的方式*/
void    push(struct    queue* lpQueue, int   data)
{
       struct     Node*newNode = createNode(data);
       if(lpQueue->sizeQueue == 0)
       {
              lpQueue->frontNode = newNode;
              lpQueue->tailNode = newNode;
        }
        else
        {
               /*排列方式,新的数据要放在原来队尾的后面,队尾的位置要发生改变,新节点变为新的队尾*/
               lpQueue->tailNode->next = newNode;
               lpQueue->tailNode = newNode;
         }
          lpQueue->sizeQueue++;
}



/*出队操作:表头法删除*/
void   pop(struct    queue* lpQueue)
{
       /*删除判断是否为NULL*/
       if(lpQueue->sizeQueue  == 0)
       {
             printf("无法出队!\n");
             return;
        }
       /*先保存下一个节点*/
       struct   Node* nextNode = lpQueue->frontNode->next;
       /*然后删除头结点*/
       free(lpQueue->frontNode);
       /*把指向头节点的指针指向新的头结点*/
       lpQueue->frontNode = nextNode;
       lpQueue->sizeQueue--;
}



/*获取队头元素*/
int   front(struct   queue* lpQueue)
{
       if(lpQueue->sizeQueue == 0)
       {
                printf("队列为NULL,无法出队!");
                system("pause");
                exit(0);
        }
        return   lpQueue->frontNode->data;
}




int   main()
{
      struct   queue*lpQueue = createQueue();
      for(int   i = 0;i<=10;i++)
      {
            push(lpQueue.i);
       }
       while(empty(lpQueue))
       {
             printf("%d\t"front(lpQueue));
              pop(lpQueue);
        }
        print("\n");
        
       
      
       
       system("pause");
       return   0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值