单链表的创建与遍历:

首先链表中节点分为数据域和指针域,数据域存储数据(比如学生信息:姓名,年龄),指针域指向下一个节点(和下一个学生的信息表连接起来的关键)。

通俗说:我创建了许多学生信息的结构体,每个结构体内都存储着一个数据的集合例如:张三信息表(张三的姓名,张三的年龄)、李四信息表(李四的姓名,李三的年龄)。。。。。

现在要把这么多的信息统一起来建立一个档案册。

一般比如说      数组,存储空间连续,在32位的系统中,int类的a[100],a[1]的地址加上四个字节就找到了a[2]的地址,你随便怎么找,你a[1]的地址加上8字节,你就找到了a[3]的地址,通过地址就可以访问内容。

现在结构体是分开的,存储位置不定,你不可能根据张三的结构体,不知道与李四结构体间隔大小的情况下,找到李四结构体的地址。

 

所以聪明的人们发明了结构体

结构体        张三的信息表(张三的姓名,张三的年龄,指针:指向下一位同学信息表地址)   

指针类型的区别:自己查资料,此处struct node *就是结构体指针的定义 ,初学肯定看到struct node *就头大,这是什么东西。

比如int类型指针指向int类型的数据,char类型指针指向char类型数据,你就把结构体看成int那样的数据类型就简单了。      

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 struct node    //创建链表的结构体
 6 {
 7     char name[20];
 8     int age;
 9     struct node*next;    //结构体指针指向下一个结构体的地址
10 };
11 
12 
13 struct node* createList(int n)    //创建结构体函数,返回结构体的头结点,n是参数需要在使用函数时候传入,定义由n个结构体组成的链表
14 {
15     struct node *head=new struct node;   //定义一个结构体的头结点
16     struct node *pre=head;    //首先定义上一个结构体指针
17     for(int i=0;i<n;i++)  
18     {
19 
20         struct node *p=new struct node;      //定义一个新的结构体
21         cout<<"请输入第"<<i+1<<"个学生的姓名和年龄:";   
22         cin>>p->name;      //输入新定义结构体的姓名
23         cin>>p->age;    //输入新定义结构体的年龄
24 
25         pre->next=p;      //上一个结构体的指针域指向下一个结构体
26         pre=p;       //把上一个指针指向新定义的结构体
27         p->next=NULL;   //把新定义的结构体指向空,也使最后一个结构体指向空
28     }
29     return head;
30 }
31 
32 void display(struct node *head)     //遍历结构体
33 {
34     struct node *p=head->next;      //定义结构体指针指向头结点的指针域  找到头结点的下一个结构体
35     while(p!=NULL)   //因为最后一个结构体的指针域为空,当遍历完最后一个结构体就结束
36     {
37         cout<<p->name<<" "<<p->age<<endl;     //向屏幕输出姓名 年龄
38         p=p->next;    //结构体指针指向下一个结构体   循环进行
39     }
40 }
41 
42 int main()
43 {
44     int n=5;
45     struct node *head=createList(n);      //使用函数,传入参数,并让节后提指针head指向链表的头结点
46     display(head);     //传入结构体指针的头结点指针,在函数体内遍历
47     return 0;
48 }

 

你也可以使用typedef重命名

typedef struct node
{
    char name[20];
    int age;
    struct node*next;
}student;

以后使用struct node *就可以变成student *,这个方法主要是简化代码,但是为了更好理解,刚开始还是写全!

版权声明:本文为handsometaoa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/handsometaoa/p/11052051.html