当前位置: 首页 > news >正文

哈尔滨建站的系统西宁网站制作

哈尔滨建站的系统,西宁网站制作,wordpress 订单系统,wordpress 导航插件链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列#xff1a;只允许在一端进行插入数据操作#xff0c;在另一端进行删除数据操作的特殊线性表#xff0c;队列具有先进先出 FIFO(Fi… 链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列只允许在一端进行插入数据操作在另一端进行删除数据操作的特殊线性表队列具有先进先出 FIFO(First In First Out)的原则 入队列进行插入操作的一端称为队尾 出队列进行删除操作的一端称为队头 如图所示 1.2队列的实现 队列也可以数组和链表的结构实现使用链表的结构实现更优一些因为如果使用数组的结构出队列在数组头上出数据效率会比较低。 2. 队列的各种函数实现 首先我们先定义一个栈的结构 typedef int QDataType;//节点的结构 typedef struct QueueNode {QDataType data;struct QueueNode* next; }QNode;//链表的结构 typedef struct Queue {QNode* phead;QNode* ptail;int size; }Queue;这里我们定义了两个结构体这是因为在尾插的时候需要一个尾指针如果每次尾插的时候都要遍历找尾效率太低所以我们可以定义一个尾指针在头删的时候需要一个头指针这个size其实可以加上有也可以不加但是不加上的话求队列长度的时候需要遍历比较麻烦多个数据共同管理这个队列所以我们可以封装成一个结构体来管理这个队列。 初始化队列 void QueueInit(Queue* pq) {aseert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0; }销毁队列 void QueueDestroy(Queue* pq) {assert(pq);QNode* pcur pq-phead;while (pcur){QNode* next pcur-next;free(pcur);pcur next;}pq-phead NULL;pq-ptail NULL;pq-size 0; }因为队列中的每个节点的空间都是动态开辟的所以在用完队列后要及时释放动态开辟的每一个节点。 队尾入队列 void QueuePush(Queue* pq,QDataType x) {assert(pq);QNode* newcode QueueBuyNode(x);if (pq-phead NULL){assert(pq-ptail NULL);//防止一个为空一个不为空的情况pq-phead pq-ptail newcode;}else{pq-ptail-next newcode;pq-ptail pq-ptail-next;}pq-size; }这里也可以不把申请节点的代码单独写成一个函数因为这里只有这一个地方会用到申请节点的操作但是还是建议封装成一个函数一方面可以提高代码的可读性另一方面可以在一定程度上避免代码出错。 这里的assert(pq-ptail NULL);这句代码主要时为了防止自己的代码写错造成一个为空一个不为空的情况所以也可以不写保证写代码的时候细心一点就可以了。 申请一个节点 QNode* QueueBuyNode(QDataType x) {c* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);exit(1);}newnode-data x;newnode-next NULL; }注意这里是申请一个节点所以要用定义队列节点的结构体类型 QNode而不是管理队列的结构题类型 队头出队列 void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL){pq-phead NULL;pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }这里的队头出数据也就是头删操作要注意当删除的链表元素只剩一个时这里的头指针和尾指针同时指向这一个节点当删除这个节点的时候头指针和尾指针都会改变所以最好单独处理一下。 因为当只有一个节点的时候执行删除操作后头指针会变成空所以我们可以在头指针变成空的时候也把尾指针变成空所以这个代码也可以这样写。 void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));QNode* next pq-phead-next;free(pq-phead);pq-phead next;if (pq-phead NULL){pq-ptail NULL;}pq-size--; }获取队列头部元素 QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-phead-data; }想要获取队头元素只需要返回队头指针指向的元素的值 获取队列尾部元素 QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data; }想要获取队尾元素只需要返回队尾指针指向的元素的值 获取队列中有效元素个数 int QueueSize(Queue* pq) {assert(pq);return pq-size; }这里只需要返回控制队列结构里面的size就可以了如果不把size封装结构体里面就需要遍历链表求队列元素个数不但麻烦效率也低。 检测队列是否为空如果为空返回非零结果如果非空返回0 bool QueueEmpty(Queue* pq) {assert(pq);return pq-phead NULL pq-ptail NULL; }当头指针和尾指针同时指向空的时候链表一定为空。 3. 队列的全部代码实现 Queue.h #include stdio.h #include stdlib.h #include stdbool.h #include assert.htypedef int QDataType;//节点的结构 typedef struct QueueNode {QDataType data;struct QueueNode* next; }QNode;//链表的结构 typedef struct Queue {QNode* phead;QNode* ptail;int size; }Queue;// 初始化队列 void QueueInit(Queue* pq);//销毁队列 void QueueDestroy(Queue* pq);//队尾入队列 void QueuePush(Queue* pq, QDataType x);// 队头出队列 void QueuePop(Queue* pq);//获取队列头部元素 QDataType QueueFront(Queue* pq);// 获取队列队尾元素 QDataType QueueBack(Queue* pq);//获取队列中有效元素个数 int QueueSize(Queue* pq);//检测队列是否为空如果为空返回非零结果如果非空返回0 bool QueueEmpty(Queue* pq); Queue.c #include Queue.h// 初始化队列 void QueueInit(Queue* pq) {assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0; }//销毁队列 void QueueDestroy(Queue* pq) {assert(pq);QNode* pcur pq-phead;while (pcur){QNode* next pcur-next;free(pcur);pcur next;}pq-phead NULL;pq-ptail NULL;pq-size 0; }QNode* QueueBuyNode(QDataType x) {QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);exit(1);}newnode-data x;newnode-next NULL;return newnode; }//队尾入队列 void QueuePush(Queue* pq,QDataType x) {assert(pq);QNode* newcode QueueBuyNode(x);if (pq-phead NULL){assert(pq-ptail NULL);pq-phead pq-ptail newcode;}else{pq-ptail-next newcode;pq-ptail pq-ptail-next;}pq-size; }// 队头出队列 void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL){pq-phead NULL;pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }//获取队列头部元素 QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-phead-data; }// 获取队列队尾元素 QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data; }//获取队列中有效元素个数 int QueueSize(Queue* pq) {assert(pq);return pq-size; }bool QueueEmpty(Queue* pq) {assert(pq);return pq-phead NULL pq-ptail NULL; }Test.c #include Queue.hint main() {Queue q;QueueInit(q);QueuePush(q, 1);QueuePush(q, 2);QueuePush(q, 3);QueuePush(q, 4);printf(size : %d\n,QueueSize(q));while (!QueueEmpty(q)){printf(%d , QueueFront(q));QueuePop(q);}printf(\n);QueueDestroy(q);return 0; }因为队列是后进先出的所以要访问队列里面的元素时必须要把队列当前元素取出才能访问下一个元素每可以看到在打印队列里面的内容时会把队列变成空那么队列里面的内容就没有了但时这也是实际当中的需求所以不会有什么影响。 运行结果如图
http://www.zqtcl.cn/news/414462/

相关文章:

  • 惠州建设工程造价管理站网站中国海洋大学站群网站建设
  • 怎么做网站里面的模块太原做网络推广
  • 网站关键词排名优化应该怎么做wordpress实惠主机
  • 服装 营销型网站案例网站建设资料需要公司提交的吗
  • 网站权重高 做别的关键词怎么查看网站是否被百度收录
  • 沈阳网站开发培训多少钱广州做网站的公司哪家好
  • 宁波江北建设局网站建筑室内设计公司
  • 辽宁网站seo做网站的不给ftp
  • 南宁seo网站排名优化公司电商主图一键生成免费
  • 宁波论坛建站模板wordpress发布公告
  • 电子政务门户网站建设汇报班级优化大师官网登录
  • 做网站购买什么软件c 购物网站开发流程
  • 阿里云做网站送服务器赣州英文网站建设
  • 网站备案号官网黄山网站建设哪家好
  • 鞍山做网站排名滁州seo
  • 加关键词的网站seo服务外包公司
  • 大丰建站研究网站建设
  • 网站建设维护教程聊城做网站推广地方
  • 郑州七彩网站建设公司怎么样国内老牌的注册代理
  • 衡水外贸网站建设临清轴承网站建设
  • 上街郑州网站建设网站管理建设的需求分析
  • 厦门网站建设策划网站推广的常用方法有哪些
  • 做电脑图标的网站上海定制网站建设公司哪家好
  • 重庆seo网站推广工具济南网页设计师招聘信息
  • 甘肃永靖建设住建局网站深圳网络广告推广公司
  • 台州企业网站搭建电话厦门学网站建设
  • 做易经网站做网站布为网
  • 高端定制开发网站可以做网站的网络
  • 局政务网站建设管理工作总结wordpress ks主题
  • 网站集约化建设的意义网页制作成app