//链式存储————队列//C语言解释

队列,其实就是先进先出,就好比打饭排队,对头的一直出去,队尾一直有加入。
接下来我模拟一下入队过程
初始状态 |head,rear|
元素进入:|head|—|1|—|2|—|rear 3|,进入过程中也就是头指针那个位置保持不动,元素也不会进入头指针那个节点,尾指针会一直移入元素寄进来的那个节点
元素删除:|head—|2|—|rear 3|,|head|—|rear 3|,|head,rear|。

现在我们便开始一个代码实现的过程

1:定义代码的节点
typedef struct
{
int data;
struct Node *next;
}Node,*Queue;
2:定义队列
typedef struct
{
Queue head;
Queue rear;
}LinkQueue;
3:初始化队列
void chushiQueue(LinkQueue *queue)
{
queue->head=queue->rear=(Queue)malloc(sizeof(Node));

 if(queue=NULL)
 exit(0);

}
3:入队
//这里呢我们需不需要判断队满?因为是链式存储,所以不需要
void inQueue(int temp,LinkQueue *queue)
{
Queue q=(Queue)malloc(sizeof(Node));

    if(q==NULL)
    exit(0);     //exti(0)意为程序运行正常,退出
  //向节点存入数据
  q->data=temp;
  q->next=NULL;
  queue->rear->next=q  //这步其实就是一个节点连接
  queue->rear=q;     //节点增加后,尾指针指向最后的节点

}

4.出队
出队过程,那我们就需要判断对空
(1)
bool isEmpty(LinkQueue queue)
{
return queue.head==queue.rear?true:false;
}

void deleteQueue(LinkQueue queue)
{
Queue q=NULL;
if(!isEmpty(
queue))
{
q=queue->head->next;
queue->head->next=q->next; //让头指针和被删除元素下一个元素连接起来
if(q==queue->rear); //判断删除元素是否是最后一个元素
queue->rear=queue->head;
free(q);
}

5.遍历过程,其实这个就是一个查看过程

void traversal(LinkQueue queue)
{
int i=1;
Queue q=queue.front->next;

while(q!=NULL)

{
printf(“队列第%d个元素是:%d\n”,i,q->data);
q=q->next;
i++;
}
}
6.销毁,就是最后的一个head和rear的那个节点我们得删去

void detory(LinkQueue *queue)
{
if(queue->head==queue->rear)
{
free(queue->head);
printf(“销毁成功\n”);
}

}

其实我是看了这个http://www.cnblogs.com/kubixuesheng/p/4104802.html,这个写的很好,我是为了方便理解,自己又敲了一便,读者可去这篇文章获取完整代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值