C语言实现一个队列
来源:互联网 发布:知乎 法国 实力 编辑:程序博客网 时间:2024/05/29 12:57
利用C语言实现一个简单的有简单功能的队列(只有输入输出用的C++),其中对指针的调试还是比较麻烦,这里总结一些关于segmentation faults(段错误)的常见错误:
<1>定义了指针后记得初始化,在使用的时候记得判断是否为NULL,向NULL指针写入数据会引起段错误。
<2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等,访问了非法的内存。
<3>在变量处理的时候变量的格式控制是否合理等,int a; printf("%s",a )
, 会访问地址为a的内存空间,也会引发这种段错误。
下面附上代码
#include <stdio.h>#include <iostream>#include <stdlib.h>using namespace std;#define FALSE 0#define TRUE 1typedef int elemtype;struct Node{ elemtype data; Node *next;};struct Queue{ Node *front; Node *rear;};void initQueue(Queue *q){ q->front = q->rear = (Node *)malloc(sizeof(Node)); if (!q->front) { return; } q->front->next = NULL;}int isEmpty(Queue *q){ if (q->front == q->rear) { return TRUE; } else { return FALSE; }}void Enqueue(Queue *q, elemtype data){ Node *repareInsert = (Node *)malloc(sizeof(Node)); if (repareInsert == NULL) { exit(0); } q->rear->data = data; q->rear->next = repareInsert; q->rear = repareInsert;}elemtype Dequeue(Queue *q){ if (isEmpty(q)) { exit(0); } Node *FrontTmp = q->front; elemtype data = q->front->data; q->front = q->front->next; free(FrontTmp); return data;}void MakeEmpty(Queue *q){ while (!isEmpty(q)) { Dequeue(q); }}void DisposeQueue(Queue *q){ Node *FrontTmp = q->front; while (FrontTmp != q->rear) { cout << FrontTmp->data << endl; FrontTmp = FrontTmp->next; }}int main(){ Queue q; initQueue(&q); for (int i = 1; i <= 5; i++) { Enqueue(&q, i); } cout << "Dispose queue: " << endl; DisposeQueue(&q); cout << "dequeue: " << endl; while (!isEmpty(&q)) { cout << Dequeue(&q) << endl; } return 0;}
0 0
- c语言一个队列实现
- C语言实现一个队列
- C语言一个队列的实现
- C语言一个队列的实现
- C语言实现一个链式队列
- C语言一个队列的实现
- C语言一个队列的实现
- c语言俩个栈实现一个队列
- 队列 C语言实现
- 队列C语言实现
- C语言实现队列
- 队列 c语言实现
- C语言实现队列
- C语言实现队列
- C 语言实现队列
- c语言实现队列
- C语言实现队列
- C语言队列实现
- Hibernate连接sqlite使用相对路径(src)
- 走进数据结构之排序(七)---归并排序
- CodeForces
- 蓝桥杯之方格填数
- 课堂笔记_ 光线跟踪原理
- C语言实现一个队列
- 开始安卓技术学习之旅
- 【学习笔记19】java面向对象-包
- 资金池
- 洛谷P1280/tyvj1034 尼克的任务 DP
- Qt模块化笔记之network——第二个TCP程序,传输图片文件的实现(2)
- 【MQTT】使用Wireshark分析MQTT协议
- Python装饰器学习(九步入门)
- MFC之画线方法