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
本例中在函数参数传递中,使用别名,在调用的函数中使用这个形参会改变实参的值。
在这里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");
相关文章推荐
- C语言中用队列和搜索解决"加1乘2平方问题"
- c语言:链队列的实现
- 数据结构-顺序队列(C语言)
- c语言写螺旋队列并分析
- c语言:用双向链表实现双端队列(队列两端都可以进行入队出队操作)
- 手工数据结构系列-C语言模拟队列和栈 hdu1702
- <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现
- 数据结构 c语言设计队列 实现桶式排序和基数排序 测试性能
- 【C语言】【unix c】两个进程通过消息队列实现进程间的通信
- C语言实现链队列
- C语言队列的实现
- 详解数据结构C语言实现之循环队列
- 数据结构与C语言实现(二)——堆栈和队列
- C语言 消息队列
- C语言二叉树与队列实现基础代码
- C语言实现队列
- c语言实现通用数据结构(二):通用队列
- Linux下的C语言编程——链表实现队列操作
- C语言 循环队列
- 配对堆合并例程原地队列实现C语言