第十二章 使用结构指针

Posted Hk_Mayfly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十二章 使用结构指针相关的知识,希望对你有一定的参考价值。

这张这章没有认真读,涉及到数据结构。

1.链表是一些包含数据的独立数据结构(通常称为节点)的集合。每个节点之间通过链或指针连接在一起。

 

2.Node:通常在数据结构中用作节点的类型名。

struct Node{

...

}

之后可以

Node x;相当于struct Node x;

 

 

 1 void main ()//主函数
 2 { 
 3  struct LNode *head;
 4  head = creat();//调用creat函数,创建一个单链表,并将单链表的头指针地址存放在指针 head 中
 5 }
 6 struct LNode *creat()//定义指针函数 creat(地址)及创建一个单链表 ,其返回值是一个单链表的首地址
 7 {
 8  struct LNode *head,*p,*rear;//定义指针变量
 9  int x;
10  char a;
11  head=(struct LNode *)malloc(sizeof(struct LNode));/*申请 struct list 类型字节长的存储空间,第一个括号中内
12  容表示将申请空间的首地址经过强制类型转换为struct list *型
13  并把转换后的首地址存储在指针head中;*/
14  rear=head;//用一个需要移动的指针 rear 来存放头结点的地址
15  puts("input name of the list :\n");
16  scanf("%c",&a);//输入的链表名称只能用一个字母表示 ;若用两个则应为 : scanf("%c%c",&a,&b);
17  puts("input the list end with ‘-1‘:\n");//输入单链表的元素以 -1 结束 
18  scanf("%d",&x);
19  while(x+1)//输入的数据为非零数 判断为真,当等于 -1 时为假,则跳出循环
20  {
21  p=(struct LNode *)malloc(sizeof(struct LNode));//同上
22  p->data=x;//将输入的值取出一个值并存储在结点 p 的数据域中
23  rear->next=p;//将结点 p 的首地址存放在 p 的前驱结点的指针域中
24  rear=p;//rear指针后移到下一个结点首地址处
25  scanf("%d",&x);//继续从输入的值中取出另一个值
26  }
27  rear->next=NULL;//指针 rear 移至最后一个结点处,将此结点的指针域 制空(NULL)
28  puts("the list you input is :");
29  print(head->next,a);//调用 print 函数
30  return head->next;//函数结束时返回创建的单链表的头指针(此头指针指向的结点为输入的第一个数值所存放的结点)
31 }
32 void print (struct LNode *head,char a)/*定义一个 print 函数,及打印函数,将单链表head中元素输出,
33  a为要输出单链表的名称*/
34 {
35  struct LNode *p;//定义一个需要移动的指针 p
36  p=head;//将单链表的首地址赋予指针 p
37  printf("%c = ( ",a);
38  while( p )//p存放的是地址,当 p 指向链表最后一个结点时 p=p->next(=NULL)为空,while判断为假,跳出循环
39  {
40  printf("%d ",p->data);//输出 p 指针指向的结点的数据域中存放的数值
41  p=p->next;//p指针后移,指向下一个结点首地址
42  }
43  puts(")");
44 }

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct LNode
 4 {
 5  int data;
 6  struct LNode *next;
 7 };
 8 struct LNode *creat();
 9 void print (struct LNode *head,char a);
10 void main ()
11 { 
12  struct LNode *head;
13  head = creat();
14 }
15 struct LNode *creat()
16 {
17  struct LNode *head,*p,*rear;
18  int x;
19  char a;
20  head=(struct LNode *)malloc(sizeof(struct LNode));
21  rear=head;
22  puts("input name of the list :\n");
23  scanf("%c",&a);
24  puts("input the list end with ‘-1‘:\n");
25  scanf("%d",&x);
26  while(x+1)
27  {
28  p=(struct LNode *)malloc(sizeof(struct LNode));
29  p->data=x;
30  rear->next=p;
31  rear=p;
32  scanf("%d",&x);
33  }
34  rear->next=NULL;
35  puts("the list you input is :");
36  print(head->next,a);
37  return head->next;
38 }
39 void print (struct LNode *head,char a)
40 {
41  struct LNode *p;
42  p=head;
43  printf("%c = ( ",a);
44  while( p )
45  {
46  printf("%d ",p->data);
47  p=p->next;
48  }
49  puts(")");
50 }

 

待续... ...

以上是关于第十二章 使用结构指针的主要内容,如果未能解决你的问题,请参考以下文章

C和指针 第十二章 结构体 习题

C和指针 第十二章 结构体 整体赋值 error: expected expression

第十二章 动态内存与智能指针

C++primer第十二章读书笔记---动态内存与智能指针

《C与指针》第十二章练习

《C++Primer(第5版)》第十二章笔记