C语言程序设计结构体共用体和位运算.pptVIP

  • 2
  • 0
  • 约1.09万字
  • 约 38页
  • 2019-11-06 发布于广东
  • 举报

C语言程序设计结构体共用体和位运算.ppt

2 建立首结点 (1) malloc()函数 建立首结点要使用malloc()函数。以下先对这一函数作简单的介绍。 这一函数的作用是在内存的动态存储区域中分配出一段连续的存储空间。其返回值是一个指针,该指针指向这个存储空间起始地址。如果分配内存空间失败,则返回空指针(NULL)。 其使用格式为: void *malloc (unsigned int size) 其中,size指定了使用内存空间的长度。 (2) 建立首结点 使用如下语句建立首结点: phead=(struct node *)malloc (sizeof(struct node)); pend=phead; /*初始时,末尾结点等于首结点*/ pnew=phead; /*初始时,新结点等于首结点*/ 3 向首结点输入数据 可以通过得到字符的方式向首结点输入数据,如: gets(pnew-name); 也可使用输入语句来输入数据,如: scanf(“%d,%f”,pnew-number,pnew-score); 使用如下语句给link赋予NULL: pnew-link=NULL; 4 建立其他结点 使用以下语句给结点分配空间: pnew=(struct node *)malloc (sizeof(struct node)); 使用如下语句向新的结点赋予数据: gets(pnew-name); scanf(“%d,%f”,pnew-number,pnew-score); pnew-link=NULL; 把新的结点链接在链表上: pend-link=pnew; 调整链表尾指针: pend=pnew; 如果有多个结点,可以重复2.4节的方法直到建立了全部结点。在实际编写程序中,往往使用循环语句。 【例12-16】(见课本) 12.7.3 链表的遍历 链表的遍历体现了对链表的查询。如果我们可以把链表中的每一个个结点都经历一遍,当然就可以查询任何一个结点了。 链表的遍历的基本思想是:首先找到链表的首结点。然后借助一个指针变量p。首先把链表首结点的地址赋予变量p,输出变量p所指结点的数据;然后把此结点数据中的指针(即下一个结点的地址)赋予变量p;如果不是尾结点,则输入此结点的数据;然后继续移动,直到尾结点的数据输出后结束。 【例12-17】(见课本) 12.7.4 删除结点 要删除链表中的一个结点,并不是删除该结点的数据,而是把该结点从链表的“链”中解脱出来。其基本思想是:如果要在原来有几个结点成如下链接关系:a?b?c ?d?e。删除结点b之后,链表就变成了a?c?d?e。 要删除一个结点,首先要查找该结点。删除结点时,还要注意以下几点:要删除的链表是否是空的;要删除的结点是否为首结点。 【例12-18】(见课本) 12.7.5 插入结点 一旦链表被创建,则插入结点是比较容易的。插入的基本思想是:如果要在原来相邻的两个结点a和b之间插入一个新的结点c.,则把结点a中的指针指向c,把结点c中的指针指向b,这样就把结点c插入到了结点a和b之间,链表链接变成了a?c?b。插入时分为几种情况:插入一个空链表、插入一个非空链表的首结点之前,插入一个非空链表的末结点之后或插入一个非空链表的任意结点。 1 在一个空链表插入结点 如果插入的链表是空的,可以使用如下程序: 【例12-19】(见课本) 2 插入一个非空链表首结点之前 如果插入非空链表的首结点之前,可以使用如下程序: 【例12-20】(见课本) 3 插入一个非空链表尾结点之后 如果插入非空链表的尾结点之后,可以使用如下例所示的程序。 【例12-21】(见课本) 4 插入一个非空链表的某一结点之后 如果插入非空链表的某一尾结点之后,则需要首先寻找这一结点。其思路是:第一步,让指针p0指

文档评论(0)

1亿VIP精品文档

相关文档