设为首页 加入收藏

TOP

2.11.2 建立动态单向链表
2013-10-12 07:02:48 来源: 作者: 【 】 浏览:114
Tags:2.11.2 建立 动态 单向

2.11.2 建立动态单向链表

建立链表首先要定义一个包含数据域和指针域的的结构类型,然后建立指向表头节点的头指针head,最后通过malloc函数动态申请一块内存作为表头节点。

  1. typedef struct node  
  2. {  
  3. int data; /*信息*/  
  4. struct node *link; /*指针*/  
  5. }NODE; /*定义节点*/  
  6. NODE *head; /*定义头指针head */ 

定义结构类型和头节点之后,我们要建立不包含数据的表头节点,可以按下列语句进行操作。

  1. NODE *p; /*说明一个指向节点的指针变量p */  
  2. p=(NODE*) malloc(sizeof(NODE)); /*申请表头节点*/  
  3. p->link = NULL; /*将表头节点的link置为NULL */  
  4. head=p; /*head指向表头节点p*/ 

此时链表的状态如图2.12 所示,由于此时链表中只有一个表头节点,没有数据节点,所以称为空链表。

 
图 2.12 空链表
为了在链表中保存数据,可以从表头位置将数据节点插入到链表中,例如,插入一个数据节点:
  1. p=(NODE*) malloc(sizeof(NODE)); /*申请一个数据节点*/  
  2. gets(p ->data); /*输入一个新的数据*/  
  3. p->link=head->link; /*建立链接关系。将表头节点的link存入p 的link中*/  
  4. head->link=p; /*将数据节点插在表头节点之后成为第一个数据节点*/ 

插入第一个数据节点后链表如图2.13 所示,然后继续插入下一个数据节点。

 
图2.13 插入一个节点后的链表
根据上面的链表建立过程,可以写出函数create建立有n个数据节点的链表,如下所示:
  1. create(NODE *head,int n)  
  2. {  
  3. NODE *p;  
  4. for(; n>0;n--)  
  5. {  
  6. p=(NODE*) malloc(sizeof(NODE));  
  7. if(p==NULL)  
  8. exit(0);  
  9. gets(p->data);  
  10. p->link = head->link;  
  11. head->link = p;  
  12. }  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.11.3 单向链表的输出 下一篇2.10.5 使用 typedef 定义类型

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: