您的位置:首页 > 理论基础 > 数据结构算法

程序员面试宝典之数据结构基础----队列的入队与出队

2012-10-03 20:29 302 查看
我的盲点:将队列入队、出队的方向搞反,同时将队列中节点指针的指向弄反。

没有考虑队列出队后,该队列是否为空的情况。

入队时,队列为空要单独处理。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

//Notice:队列的数据结构组成,先入队列(即出队列部分)部分为头(first),后入队列部分为尾(rear),队列的链表指针形式是从头指向尾。
//  ->(入队列)    node1<-node2 <- node3 <- ....<-noden   ->(出队列)
//                    1                              1
//                   rear                           first

typedef struct Node
{
int data;
struct Node *next;
}node;
typedef struct Queue    //notice :队列的数据结构只是包括两个节点指针(头和尾);
{
node* first;
node* rear;
}queue;

//队列的插入操作。注意:队列是从rear部插入
queue* insert(queue* My_queue,int x)
{
node* s;
s = (node*)malloc(sizeof(node));
s->data = x;
s->next = NULL;
//分为队列为空与队列非空两种。
if(NULL == My_queue->rear)
{
My_queue->first = s;
My_queue->rear = s;
}
else
{
My_queue->rear->next = s;
My_queue->rear = s;
}
return My_queue;
}

//队列的删除操作。注意:删除是在first部的操作。
queue* del(queue* My_queue)
{
node* p;
int x;
//判断队列是否为空
if(My_queue->first == NULL)
{
printf("Noting to delete!!!WRONG\n");
}
else
{
x = My_queue->first->data;
p = My_queue->first;
//判断队列是否删除后为空。(易忽略)
if(My_queue->first == My_queue->rear)
{
My_queue->first = NULL;
My_queue->rear = NULL;
free(p);
}
else
{
My_queue->first = My_queue->first->next;
free(p);
}
return My_queue;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐