c语言之队列

    xiaoxiao2021-04-17  46

    在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");

    转载请注明原文地址: https://ju.6miu.com/read-674053.html

    最新回复(0)