`

指向结构体变量的指针与链表结构的关系应用

c++ 
阅读更多

指向结构体变量的指针与链表结构的关系应用

1、   一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的其实地址。指针变量也可以用来指向结构体数组的元素。

例如:声明一个结构体Student类型,定义一个Student结构体类型变量stu,声明一个Student指针*p指向stu的地址,我们可以通过stu调用Student结构体类型的成员变量,相应的,因为*p指向stu的内存的起始位置,所以我们可以通过调用*p来调用stu的成员变量,例如:(*p).name,(*p).age来赋值操作等等,注意*p的括号不可省略,因为成员运算符”.”优先级大于”*”。

2、   指向运算符

为了使用方便直观,C++提供了指向结构体变量的运算符->,例如:p->num表示指向p当前指向的结构体变量中的成员num。p->num和(*p).num等价。

总结:如下三种形式等价:

  结构体变量.成员名。如stu.num

  (*p).成员名。如:(*p).num

  p->成员名。如p->num。”->”称为指向运算符。

分析如下几种运算:

 p->n:得到p指向的结构体变量中的成员n的值

p->n++:得到p指向的结构体变量中的成员

n的值,用完该值后使它加1.

++p->n:得到p指向的结构体变量中的成员n的值,并使之加1然后再使用。

3、   用结构体变量和指向结构体变量的指针构成链表

a) 链表是一种常见的重要的数据结构。

b) 链表有一个“头指针“变量,用来存放一个地址。该地址指向一个元素。链表中的每一个元素称为”结点“,每个结点都应包括两个部分:一是用户需要用的实际数据,二是下一个结点的地址。最后一个元素不再指向其他元素,称为”表尾“,它的地址部分放一个”NULL“(空地址),链表到此结束。

c)  链表中各元素在内存中的存储单元可以是不连续的。查找元素可以通过前后链表之间的关系查找,前一个链表的第二个元素的地址是下一个链表的第一个元素。

d) 这种链表的数据结构,必须利用结构体变量和指针才能实现。可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一个结点地址的指针变量。例如:

struct Student

  { 

int num;

float score;

Student*next;

};

           其中成员num和score是用户需用用到的数据,next是指针类型的成员,指向Student类型数据,用来存放下一个结点的地址。设计者不必知道各个结点的具体地址,只要保证能将下一个节点的地址放到前一个结点的成员next中即可。

建立并输出一个简单链表:

 /*

 *table.cpp

 *

 * Created on: 2012-4-8

 *     Author: David

 */

 

#define NULL 0

#include<iostream>

 

struct Student

{

  long num;

  float score;

  struct Student *next;

};

 

int main()

{

  Studenta,b,c,*head,*p;

  a.num=31001;a.score=89.5;//对结点anumscore成员赋值

  b.num=31003;b.score=90;//对结点bnumscore成员赋值

  c.num=31007;c.score=85;//对结点cnumscore成员赋值

  head=&a;     //将结点a的起始地址赋给头指针head

  a.next=&b;   //将结点b的起始地址赋给a结点的next成员

  b.next=&c;   //将结点b的起始地址赋给b结点的next成员

  c.next=NULL;//结点的next成员不存放其他结点地址

  p=head;     //p指针指向a结点

 

  do

  {

    cout<<p->num<<""<<p->score<<endl; //输出p指向的结点的数据

    p=p->next;   //使p指向下一个结点

  }

  while(p!=NULL); //输出完c结点后p的值为NULL

  return 0;

}

 

开始时使head指向a结点,a.next指向b结点,b.next指向c结点,这就构成链表关系。第一行用#define命令定义了符号常量NULL代表0,在16行将0地址赋给c.next的作用是使c.next不指向任何有用的存储单元。

4、   静态链表:所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不用用完后释放,这种链表称为静态链表。

5、   动态链表:各结点是可以随时插入和删除的,这些结点并没有变量名,只能先找到上一个结点,才能根据它提供的下一结点的地址找到下一个结点。

6、   只提供第一个结点的地址叫做头指针head,只有有了头指针,链表才能访问整个链表。

分享到:
评论

相关推荐

    详解C++中的指针结构体数组以及指向结构体变量的指针

    一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组...

    边用边学C语言(PDG格式)(中文版).rar

    第十三讲 指向结构体的指针与链表 第十四讲 文件 附录A Turbo C 2.0的使用 附录B Turbo C 3.0的使用 附录C UCDOS的使用 附录D ASCII码表 附录E 运算符和结合性 附录F 常用的部分C库函数 附录G 常见的出错提示信息

    谭浩强C语言设计第三版.pdf

     7.5.2 用指向结构体变量的指针作为函数参数  7.5.3 返回结构体类型值的函数  7.6 共用体类型数据  7.6.1 共用体的特点  7.6.2 共用体变量的应用  7.7 枚举类型数据  7.8 用typedef定义类型  习题七 第8章 ...

    指针是C语言可以用来直接访问内存地址

    指针是C语言中非常重要的一个概念,它可以用来直接访问...通过结构体指针,我们可以方便地实现对结构体变量的访问和操作。此外,我们还可以通过结构体指针来实现链表的操作,如链表的创建、遍历、查找、插入和删除等。

    C程序设计(第四版)学习辅导【谭浩强】

    9.3.1指向结构体变量的指针305 9.3.2指向结构体数组的指针306 9.3.3用结构体变量和结构体变量的指针作函数参数308 9.4用指针处理链表311 9.4.1什么是链表 311 9.4.2建立简单的静态链表312 9.4.3建立动态链表313 ...

    C语言程序设计(谭浩强)第三版

     9.3.1指向结构体变量的指针  9.3.2指向结构体数组的指针  9.3.3用结构体变量和结构体变量的指针作函数参数  9.4用指针处理链表  9.4.1什么是链表  9.4.2建立简单的静态链表  9.4.3建立动态链表  9.4.4输出...

    C语言全书word版CHAR11

    11 结构体与共用体 1 11.1 定义一个结构的一般形式 1 11.2 结构类型变量的说明 2 11.3 结构变量成员的表示方法 4 11.4 结构变量的赋值 4 11.5 结构变量的初始化 5 11.6 结构数组的定义 5 11.7 结构指针变量的说明和...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    7.1.5 指向结构体变量的指针 7.1.6 结构体类型数据作为函数参数 *7.1.7 动态分配和撤销内存的运算符new和delete 7.2 共用体 7.2.1 共用体的概念 7.2.2 对共用体变量的访问方式 7.2.3 共用体类型数据的特点 7.3 校举...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    9.3.1 指向结构体变量的指针 9.3.2 指向结构体数组的指针 9.3.3 用结构体变量和结构体变量的指针作函数参数 9.4 用指针处理链表 9.4.1 什么是链表 9.4.2 建立简单的静态链表 9.4.3 建立动态链表 9.4.4 输出链表 9.5 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    7.1.5 指向结构体变量的指针 7.1.6 结构体类型数据作为函数参数 *7.1.7 动态分配和撤销内存的运算符new和delete 7.2 共用体 7.2.1 共用体的概念 7.2.2 对共用体变量的访问方式 7.2.3 共用体类型数据的特点 7.3 校举...

    数据结构课程设计图书管理系统.doc

    图书信息和读者信息都采用结构体类型保存。 图书信息里面包括:图书编号、图书名称、作者、现有量、库存量、指向 下一节点的指针。 读者信息里面包括:读者编号、读者姓名、借书数量、可借图书数量、指 向下一节点的...

    链表实验报告.docx

    实验一:链表的基本操作 一·实验目的 掌握链表的建立方法 掌握链表中节点的查找与删除 掌握输出链表节点的方法 掌握链表节点排序的一种方法 掌握C语言创建菜单的方法 掌握结构化程序设计的方法 二·实验环境 硬件...

    C语言程序设计(高清PDF)

    7.3.1 指向结构体类型变量的使用 135 7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 ...

    C语言程序设计(PDF格式)

    7.3.1 指向结构体类型变量的使用 135 7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 ...

    C语言程序设计.rar

    7.3.1 指向结构体类型变量的使用 135 7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 ...

    《C语言程序设计》-PDF格式

    7.3.1 指向结构体类型变量的使用 135 7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 ...

    C语言讲义.doc

    4.1.9 指向结构体数组的指针 73 4.1.10 结构中的数组成员和指针成员 73 4.1.11 在堆中创建的结构体 74 4.1.12 将结构作为函数参数 74 4.1.13 结构,还是指向结构的指针 74 4.2 联合体 75 4.3 枚举类型 75 4.3.1 枚举...

    C语言静态链表和动态链表

     结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为“引用自身的结构体”。如:  struct link  {  char ch;  struct link *p;  } a;  p...

    新概念C语言.李一波(带详细书签).pdf

    11.9 用结构体变量和指向结构体的指针做函数参数 128 习题 130 第12章 多维数组 132 12.1 二维数组的定义和引用 132 12.1.1 二维数组的定义 132 12.1.2 二维数组的引用 132 12.2 二维数组的初始化 133 12.3 ...

Global site tag (gtag.js) - Google Analytics