首页 > 其他分享 >创建队列时对结构体指针的理解

创建队列时对结构体指针的理解

时间:2023-04-30 14:45:43浏览次数:33  
标签:QNode 队列 创建 LinkQueue link front data 指针

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define ElemType int
 5 
 6 // 定义队列结点
 7 typedef struct QNode
 8 {
 9     ElemType data;
10     struct QNode* next;
11 }QNode, *QNodePrt;
12 
13 // 定义队首、队尾指针
14 typedef struct
15 {
16     QNodePrt front, rear;
17 }LinkQueue;
18 void InitQueue(LinkQueue &link)
19 {
20 //    link.front=link.rear=(QNodePrt)malloc(sizeof(QNode));
21     link.front=link.rear=(QNode*)malloc(sizeof(QNode)) ;
22 //    QNode*与QNodePrt具有等价效果  QNode*=QNodePrt
23     link.rear->next=NULL;
24     
25 }
26 void InitQueue0(LinkQueue* link)//使用指针传递 
27 {
28     link->front=link->rear=(QNode*)malloc(sizeof(QNode));
29     link->front->next=NULL;
30 }
31 
32 void InitQueue1(LinkQueue * &link)//创建指针别名为函数形参 
33 {
34     link->front=link->rear=(QNode*)malloc(sizeof(QNode));
35     link->front->next=NULL;
36 
37 }
38 //重新创建了指针 
39 
40 
41 
42 
43 int main(int argc, char const* argv[])
44 {
45     
46 //    LinkQueue* que;
47 //    que->front->data=1;
48 //    printf("%d\n",    que->front->data);
49 ////    无法输出data数据 
50 //    QNodePrt node;
51 //    node->data=2;
52 //    printf("%d\n",node->data);
53 ////    无法输出data数据 
54 //
55 ////原因:两次创建指针都(没有实例化对象) 没有将结构体成功创建出来知识创建了其类型的指针
56 //
57 //    LinkQueue que0;
58 //    que0.front->data=3;
59 //    printf("%d\n",que0.front->data);
60 ////无法输出data数据
61 ////原因:虽然LinkQueue完成成创建,但是front rear指针并没有指向实例化对象  
62 //    InitQueue(que0);
63 //    que0.front->data=9;
64 //    printf("%d\n",que0.front->data);
65 //    输出data数据 9
66 
67     LinkQueue que1;
68     LinkQueue* link=&que1;  
69     InitQueue0(&que1);
70 //    InitQueue0(link); 初始化使用指针进行地址传递 
71 //que1地址传递 
72     que1.front->data=10;
73     printf("%d\n",que1.front->data);
74 //输出data 10
75 
76 
77     LinkQueue que2;
78     LinkQueue* link1=&que2; 
79     InitQueue1(link1);
80     link1->front->data=9;
81 //    实参传递必须为指针类型 
82 //    InitQueue1(&que1); 报错必须传递指针 不可直接直接传递地址 
83     printf("%d\n",que2.front->data);
84 //输出data 9
85      
86 return 0;
87 }

 

标签:QNode,队列,创建,LinkQueue,link,front,data,指针
From: https://www.cnblogs.com/liuyanchao/p/17365251.html

相关文章

  • 80.指针
    1.指针的基本概念1)变量的地址  变量是内存变量的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。C++用运算符&获取变量在内存中的起始地址。语法:&变量名2)指针变量指针变量简称指针,它是一种特殊的变量,专用于存放变量在内存中的起始地址。语法:数据......
  • 四:轻松学设计模式:创建型、结构型、行为型概览
    在软件开发的世界中,有一个众所周知的词汇——设计模式。设计模式是一种解决特定问题的优雅方案,代码让人看起来就有种自然的感觉。现在,我们就来轻松、幽默地了解一下这些神秘的设计模式吧!创建型(Creational):生孩子还是领养?这里有五种方法!1、单例模式(Singleton):只要一个宝贝!想象一下,......
  • 优先队列
    优先队列有两个分支,一个是小根堆,一个是大根堆。这是一个优先队列的定义:priority_queue<int>q;默认是大根堆。大根堆,也就是堆顶是最大的数,按着降序排到堆底。小根堆,也就是堆顶是最小的数,按着升序排到堆底。大根堆定义:priority_queue<int>q;由大根堆转小根堆有三种方......
  • c语言创建队列的链式存储
    #include<stdio.h>#include<stdlib.h>typedefstructLinkNode{intdata;structLinkNode*next;}LinkNode;typedefstructLink{LinkNode*front,*rear;//frontrear为链表的伴随指针}LinkQueue;//初始化voidInitQueue(LinkQueue*......
  • docker 创建mysql及卷挂载
    dockerpullmysql:5.7dockerrun-d-p3307:3306-v/home/mysql/conf:/etc/mysql/conf.d-v/home/mysql/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=root--namemysql57mysql:5.7----------------------------------------------d后台运行-p3307:3306端口映射-v......
  • C++用new创建的对象和不用new创建的对象的区别
     在C++中,使用new关键字来创建对象时,与不使用new关键字来创建对象时,会产生以下几个区别:内存管理:使用new关键字来创建对象时,由编译器来决定分配内存的方式,这样可以更有效地利用内存资源。而不使用new关键字来创建对象时,则需要手动分配内存,可能会浪费一些内存资源。对象生命周期......
  • Midjourney 创建私人画图机器人(保姆级教程)
    本教程收集于:AIGC从入门到精通教程汇总之前给大家介绍过了Midjourney的注册教程:AI绘画:Midjourney注册(保姆级教程)也有StableDiffusion(开源)的本地搭建教程:AI数字绘画:stable-diffusion本地部署教程你是不是遇到以下问题:1.Midjourney会员怎么自建绘图服务器,不受其他人的打扰?......
  • 【python基础】创建和删除目录
    前言importosimportshutilpath='/home/tfl19671/out'ifnotos.path.exists(path):os.mkdir(path)else:shutil.rmtree(path,True)os.mkdir(path)其中shutil.rmtree(filepath,ignore_errors=True)删除整个filepath路径的内容。如果ignore_errors=True,则表示删除......
  • 第三章-栈 队列和数组
    栈stack数据接口三要素逻辑,运算,存储只允许在一端进行数据插入和删除操作.LIFO规则,lastinfirstout先进后出联想到烤串.doge卡特兰数(catalan),n个不同元素进栈,出栈元素不同排列的个数为顺序栈链栈只在头结点插入和删除就是链栈队列FIFOfirstinfirsto......
  • RabbitMQ 实现消息队列延迟
    1.概述要实现RabbitMQ的消息队列延迟功能,一般采用官方提供的rabbitmq_delayed_message_exchange插件。但RabbitMQ版本必须是3.5.8以上才支持该插件,否则得用其死信队列功能。2.安装RabbitMQ延迟插件检查插件使用rabbitmq-pluginslist命令用于查看RabbitMQ安装的插件。rabbitmq-pl......