首页 > 其他分享 >《数据结构》王卓老师 p48-p62学习反馈

《数据结构》王卓老师 p48-p62学习反馈

时间:2023-10-18 22:46:38浏览次数:35  
标签:LinkQuNode p62 return ElemType next 王卓 DataNode p48 front

跟着青岛大学-王卓老师的视频进行到链队列时,运行链队列代码的时候遇到了两个问题:

1.)Program received signal SIGSEGV Segmentation fault

img

附代码:

 #include<stdio.h>
 #include<stdlib.h>
 typedef char  ElemType;
 typedef struct qnode{
  ElemType data;
  struct qnode *next;
 }DataNode; //数据节点
 typedef struct{
  DataNode *front;
  DataNode *rear;
 }LinkQuNode; //链队节点
 //初始化
 void InitQueue(LinkQuNode *&q){
 ​
  q = (LinkQuNode *)malloc(sizeof(LinkQuNode)); //必加
  q->front = q->rear = (DataNode *)malloc(sizeof(DataNode));
  q->front->next = NULL;
 }
 ​
 //判断是否为空
 bool EmptyQueue(LinkQuNode *q){
  if(q->front->next == NULL) return true;
  return false;
 }
 //入队
 void EnQueue(LinkQuNode *&q,ElemType e){
  DataNode *p;
  p = (DataNode *)malloc(sizeof(DataNode));
  p->data = e;
  p->next = NULL;
  q->rear->next = p;
  q->rear = p;
 }
 //出队
 bool DeQueue(LinkQuNode *&q,ElemType &e){
  if (EmptyQueue(q)) return false;
  DataNode *p;
  p = q->front->next;
  e = p->data;
  q->front->next = p->next;
  free(p);
 // printf("%c\n",e);
  return true;
 }
 int main(){
  LinkQuNode *p;
  ElemType a[]="abcdefg",b[10]="";
  InitQueue(p);
 }

分析及解决:调用InitQueue函数的时候有用到q指针 但是却没有给他赋初始值;加上代码q = (LinkQuNode *)malloc(sizeof(LinkQuNode)); 后问题解决;

2.) 出队一直死循环 运行没有结果;

 //出队
 bool DeQueue(LinkQuNode *&q,ElemType &e){
  if (q->front == q->rear) return false;
  DataNode *p;
  p = q->front->next;
  e = p->data;
  q->front->next = p->next;
  free(p);
 // printf("%c\n",e);
  return true;
 }
 int main(){
  LinkQuNode *p;
  ElemType a[]="abcdefg",b[10]="";
 ​
  InitQueue(p);
 
  for(int i=0;i<=strlen(a);i++) EnQueue(p,a[i]);//入队
  for(int i=0;DeQueue(p,b[i]);i++); //出队
  printf("%s",b);
 }

分析及解决: 想了很久,但是一直没有找出来, 这玩意果然还是得动手用笔画一下,一画思路就清晰了,可以看到在进行出队操作的时候,front其实一直都没有动,所有的操作都是改变front->next的值,如果判断条件为 q->front == q->rear 那么它一直都走不出来

冷静换个思路想 末尾元素是g,而它的next是指向NULL,那么当front走到g元素的位置,用front->next==NULL 就可以确定此时链队列已经没有元素了,将第3行改为if(q->front->next == NULL) return false; 错误解决

 

这是小弟第一次写博客笔记,上面只是个人的一些理解,有什么不对的地方欢迎大家批评指正,谢谢!

 

标签:LinkQuNode,p62,return,ElemType,next,王卓,DataNode,p48,front
From: https://www.cnblogs.com/caozhixing/p/17773560.html

相关文章

  • P4814 题解
    解题思路对于每条边\((u,v)\),权值为\(w\),假设存在一条经过这一条边的路径,其最短距离为\(a\)到\(u\)的最短路加上\(v\)到\(b\)的最短距离加上\(w\),若这个值都大于\(d\),则不可能关闭这条边。由于边权非负,所以可采用dijkstra来处理最短路。因为为有向边,所以可以再建......
  • P4899 [IOI2018] werewolf 狼人 题解
    P4899[IOI2018]werewolf狼人题解题目描述省流:\(n\)个点,\(m\)条边,\(q\)次询问,对于每一次询问,给定一个起点\(S\)和终点\(T\),能否找到一条路径,前半程不能走\(0\thicksimL-1\)这些点,后半程不能走\(R+1\thicksimN-1\)这些点。中途必须有一个点在\(L\thicksimR\)之......
  • p4801题解
    解题思路:确实是一道很好的贪心,但由于加上了水这个影响因素,使题目复杂度上升了不少。(考虑的东西多了嘛)输个入。对饼干温度无脑排序。求最小值。求最大值(用双指针做,后面会讲)。解题过程:先输入(这个步骤就不用我讲了)inta[1000005];longlongn,ws;longlongmin......
  • P4801题解
    解题思路:确实是一道很好的贪心,但由于加上了水这个影响因素,使题目复杂度上升了不少。(考虑的东西多了嘛)输个入。对饼干温度无脑排序。求最小值。求最大值(用双指针做,后面会讲)。解题过程:先输入(这个步骤就不用我讲了)inta[1000005];longlongn,ws;longlongmin......
  • P6223 PODJELA
    2023.10.616:46luogusolution一道不错的树上背包题。为了方便,我们先让拿到的钱减去给定值。那么此时因为要使所有农民的值\(\ge0\)而每个节点只能通过它的祖先和其他的而非其子树节点沟通,所以我们先对于每个子树,让其所有非根值\(\ge0\)求最小次数。这样参数还不够,那我......
  • P4839 P 哥的桶 题解
    题目大意有\(n\)个桶,\(m\)次操作。在\(pos\)桶中加入一个\(val\)值,求\([l,r]\)中选任意个桶使得异或和最大,求最大的异或和,注意每个节点是一个桶可以放多个值\(n,m≤5×104\)。题目思路单点修改,区间查询,异或最大值很显然是线段树维护线性基然后这样的复杂度是......
  • luogu P4819 [中山市选] 杀人游戏 题解 【强连通分量+缩点】
    目录题目链接思路分析代码题目链接P4819思路分析首先考虑这道题的连通性。容易发现这种类型的题目会容易产生环形的状态转移。假设我们知道了其中的一个点是否是黑白点,那么我们就可以知道所有点是否是黑白点。容易陷入一个误区:我们只能通过一个点知道他所相邻的最直接的点,如何......
  • P4824 [USACO15FEB] Censoring S
    P4824[USACO15FEB]CensoringSKMP+栈同样的套路,先找B的最长前后缀,然后与A匹配不同的是要删除A中的B,特殊的是删除之后可能会产生新的B那我们可以利用栈的思想,利用f数组,记录A每一位置上B的匹配程度,这样删除时,直接回到上一个匹配程度,以防漏掉。利用栈记录下标,还在栈内的,说明......
  • PPT| 基于标准化规范化IT运维管理整体解决方案P48
        本人在四大咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.   【智能制造数字化咨询】该PPT共86页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击关注下方。  ......
  • P4859 已经没有什么好害怕的了
    原题很好的一道容斥题我们如果想让\(a_i>b_i\)的个数比\(a_i<b_i\)的对数多\(K\),这个限制是比较困难的。因为我们要同时考虑两种情况但我们可以把原问题的限定设为\(a_i>b_i\)的对数为\(\frac{n+K}{2}\),做法就容易了很多。如果\(n+K\)是奇数,直接输出\(0\)即可因此原问题......