您的位置:首页 > 编程语言 > C语言/C++

c语言之队列

2017-04-14 13:53 134 查看
在c++中,当定义了一个变量int a ; 时     int &b=a ; 当定义用地址操作符时,它的意思是指:使用b当作a的别名,会给b分配内存空间储存a的地址空间几乎可以当作指针来用

本例中在函数参数传递中,使用别名,在调用的函数中使用这个形参会改变实参的值。

在这里main函数中的局部变量,局部变量是用栈的形式储存,将局部变量压入栈中,它只会main函数结束时才会释放该局部变量的内

存,在进入自定义函数时,虽然pushsp,但是堆栈寄存器sp的值并没有改变,所以可以直接当b作为a的别名,直接通过栈访问a的内存空间

Bool布尔类型只占用1个字节,在头文件中#definefalse 0     #define true 0

#include
#include
#include

typedef int queue_element ;

typedef struct queueNode
{
queue_element num;
queueNode *next;
}*node;
struct LinkQueue
{
node ele_rear, ele_front;
};

bool InitQueue(LinkQueue &queue)    //构造一个空的队列
{
//给队列首部和尾部分配空间
if (!(queue.ele_front = queue.ele_rear = (node)malloc(sizeof(queueNode))))
//判断是否分配成功
{
printf("Memory error !\n");
return false;
}
printf("Memory right !\n");
queue.ele_front->next = NULL;
return true;
}
void add(LinkQueue &queue,queue_element value)  //从队列尾部插入
{
node p = (node)malloc(sizeof(queueNode));

p->num = value;
p->next = NULL;

queue.ele_rear->next = p;
queue.ele_rear = p;

}
bool remove(LinkQueue &queue)
{
node p;                 //置中间结构体接受队列的首部
if (queue.ele_front = queue.ele_rear)
{
printf("Memory error !\n");
return false;
}
p = queue.ele_front->next;      //将p指向队列的首部
queue.ele_front->next = p->next;
if (p == queue.ele_rear)
queue.ele_rear = queue.ele_front;
free(p);
return true;
}
int getFront(LinkQueue queue)  //得到队列首位
{
int _value;
if (queue.ele_front == queue.ele_rear)//判断队列是否为空
{
printf("The queue have no element");
return 0;
}
_value = queue.ele_front->next->num;
return _value;
}
void traverse(LinkQueue queue)
{
node p;
p = queue.ele_front->next;
printf("The values of the queue is :");
while (p != queue.ele_rear->next)
{
printf("%d  ", p->num);
p = p->next;
}
}
void destroy(LinkQueue &queue)
{
while (queue.ele_front)
{
queue.ele_rear = queue.ele_front->next;
free(queue.ele_front);
queue.ele_front = queue.ele_rear;
}

}
int main()
{
LinkQueue  queue;
int i;
int value[8] = {1,2,3,4,5,6,7,8};
InitQueue(queue);  //置空队列

for(i=0;i<8;i++)
add(queue, value[i]);
int _value ;
_value = getFront(queue);
if(_value!=0)
printf("The head value is %d\n", _value);
remove(queue);
traverse(queue);  //遍历由队列头到队列尾

destroy(queue);

printf("\nThe queue rear element is %d,the queue front element is %d ",
queue.ele_rear, queue.ele_front);
system("pause");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: