首页 > 【数据结构】某些难理解点

【数据结构】某些难理解点

 1 typedef char ListData;
 2 //表示以后可以用ListData来代替char类型
 3 
 4 typedef struct node{     //此处node,只在结构体中出现和使用
 5      ListData data;
 6      struct node *link;
 7 }ListNode;          //表示将整个结构体命名为ListNode,也就是说现在ListNode就是一种像int、char等的数据类型了,可以用它来定义别的节点
 8 
 9 typedef ListNode *LinkList;      //此处,表示以后可以用*LinkList来代替ListNode类型,其中LinkList表示的是指针,*LinkList表示的是指针所指的节点,即ListNode
10 
11 LinkList first;     //表示定义了一个指针,叫做first,但不能说此时它就是头指针了,首先还要进行空间分配,其次只有在它的基础上继续插入别的指针并且始终保持它在最前面才行
12 
13 
14 ==================以下要好好理解=====================
15 
16 ListNode *p;     //定义了一个指针,指向*p节点
17 
18 LinkList p;     //和上式效果相同,直接定义了一个指针
19 
20 所以说,
21 ListNode *p = first;
22 23 ListLink first;
24 中的first都是指针,p也是指针
25 
26 更好的写法是
27 ListNode* p = first;
28 
29 类比:
30 typedef int* intPointer;
31 
32 int* p, *q;
33 等价于
34 intPointer p, q;
35 
36 注意:     int* p 等价于 int *p
37 
38 补充:
39 //指针可以理解为一段地址,指向着某个element
40 
41 //定义一个指针
42 int* pCount;
43 char* pLetter;
44 
45 //&表示取地址符号
46 pCount = &count;
47 
48 //由指针得到所指内容,用*符号
49 int a = *pCount;

 另外:

1.队列中的头节点是空的,详见下面的删除头节点的函数

 1 Status DeQueue_L(LinkQueue &Q, QElemType &e)  {     //如果想要真正的改变的话,就使用取地址符&,通过地址来对真正的进行操作,而非局部范围内  
 2  //若队列不空,则删除Q的队头元素结点,用e返回其值,并返回OK;否则返回ERROR
 3         if (Q.front = =Q.rear) return ERROR;  
 4              //若队列空,返回ERROR
 5         p=Q.front->next;             // p指向队头元素结点
 6         e=p->data;
 7         Q.front->next=p->next; // 修改链队列头结点指针
 8         if(Q.rear= =p)  Q.rear=Q.front;          
 9 // 对于链队列只有一个元素结点的情况,要同时修改队尾指针
10         free(p);
11         return OK;
12 }

 

转载于:https://www.cnblogs.com/QingHuan/p/4948843.html

更多相关:

  •   各位代码界的大佬大家好,今天跟大家分享一个在C/C++中常用,但是很危险的一串代码——*(p++)   为什么说这一行代码比较危险呢,因为对于C/C++来说,成也指针,败也指针。C/C++中指针便于我们操作一块连续的内存空间中内容,但是同时我们也要承担一些风险,比如:内存泄漏,野指针,只想垃圾数据等等。今天我们要说的就是指向垃圾数...

  • 智能指针——shared_ptr为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。   智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 1 if (p1 && p1->empty())   最安全的分配和使用动态内存的方法是调用...

  • 1,一个整形数:  int a; 2,一个指向整形数的指针: int *a; 3,一个指向指针的指针,它指向的指针指向一个整形数:  int **a; 4,一个有10个整形数的数组: int a[10]; 5,一个有10个指针的数组,每个指针指向一个整形数: int *a[10]; 6,一个指向有10个整形数的数组的指针:  int...

  • 常用的几种数据类型: 类型标识符 说明 字节 值的范围   int 整型 4 –2,147,483,648 到 2,147,483,647 VC++中为long int类 short 短整型 2 –32,768 到 32,767   long 长整型 4 –2,147,483,648 到 2,147,4...

  • 题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 k =...

  • 题目:从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 题目: /*** Definition for singly-linked list.* struct Lis...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例:输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解法一:双指针法 时间复杂度:O(a+b) 循环比较两个子问题的次数为 a+b a,b为两个子问题的长度空间复杂度:O(1) 双指针,常数级别复杂度...

  • 这是一道经典的面试题,下面是我的研究和举一反三,特整理如下: 分为三种情形: (1)删除有序链表的重复节点,重复节点一个都不留 (2)删除有序链表的重复节点,重复节点只留一个 (3)删除无序链表的重复节点,重复节点只留一个 下面是相关节点的定义: typedef struct ListNode {int val;struc...

  • 下面是后面链表相关题目中需要用到的链表结点的定义和相关操作函数,参见下面的list.h文件: 注意链表结点的定义采用cpp的定义方式,它会被cpp的文件调用。比如后面删除链表重复结点的文件del_repeated_list.cpp中的编译方式: g++ -g del_repeated_list.cpp -o del_repeate...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...