打印

C解析之九链表初探

[复制链接]
873|8
手机看帖
扫描二维码
随时随地手机跟帖
沙发
elecintop|  楼主 | 2014-4-28 22:39 | 只看该作者
链表可以更好的适应实时变化的存储需求,具有无限的扩展性,然而你并不需要担心是否有足够连续的内存。

使用特权

评论回复
板凳
elecintop|  楼主 | 2014-4-28 22:44 | 只看该作者
1.链表的优势:
连续内存约束:数组的内存必须是连续的,当存储数据量达到一定程度,开辟数组空间可能面临一个严重的问题-内存中找不到足够大的连续内存。链表不需要连续的内存,它可以将零散的内存串起来,不断的延伸表的长度。

使用特权

评论回复
地板
elecintop|  楼主 | 2014-4-28 22:46 | 只看该作者
插入与删除:数组的插入与删除需要移动大量的数据,并且在时间的消耗上具有不定性,在数据实时变化的情况下,数组的效率非常低下。链表的删除与插入只需操作几个指针,具有固定的时间消耗,相当高的效率。

使用特权

评论回复
5
elecintop|  楼主 | 2014-4-28 22:46 | 只看该作者
更好的适用性:即使是动态开辟的数组,如果遇到更大的存储需求,就必须重新开辟更大的数组并复制数据。链表在几乎可以满足任何大小,不断变化的存储需求。

使用特权

评论回复
6
elecintop|  楼主 | 2014-4-28 22:49 | 只看该作者
2.链表的构成:
链表由节点,相互链接形成。那么组成链表的结点应该具有哪些特点,首先链表是用来存储数据的,所以结点必须有数据存储区,再者链表需要相互链接,那么显然还有一个指针存储区。

使用特权

评论回复
7
elecintop|  楼主 | 2014-4-28 22:51 | 只看该作者
3.链表的建立:
第一步:定义节点。
第二不:添加节点形成链表。

使用特权

评论回复
8
elecintop|  楼主 | 2014-4-28 22:54 | 只看该作者
下面是链表建立的示例:
#include<stdio.h>
#include<stdlib.h>
//************
//定义链表节点
//************
struct Node{
int id; //id为学号,Score为成绩
int Score; //id,Score为数据区
struct Node * next; //指针next,指向下一个节点,故类型为Node *
};
//************
//定义链表头
//************
Node *Head;

int main(){
Node *temp;
Node *p1;
Head=(Node *)malloc(sizeof(Node));
if(Head!=NULL){ //检查是否申请空间成功
Head->next=NULL; //只有头节点,故此时指向空NULL
//id,Score均不赋值,一般头节点不用于存储数据
}
printf("现在创建含4带个节点的链表:\n");
for(int i=0;i<4;i++){
//************
//新建一个节点并赋值
//************
temp=(Node *)malloc(sizeof(Node));
if(temp!=NULL){ //检查是否申请空间成功
temp->next=NULL;
printf("请输入id与Score:\n");
scanf("%d %d",&temp->id,&temp->Score);
}
//************
//将节点添加到链表末尾
//************
p1=Head;
while(p1->next!=NULL)
{
p1=p1->next; //找到链表的末尾
}
p1->next=temp; //将节添加到链表的末尾
}
printf("现在输出链表中的4个节点:\n");
//************
//输出链表
//************
p1=Head->next;
while(p1!=NULL){
printf("id为%d,成绩为%d\n",p1->id,p1->Score);
p1=p1->next;
}

return 0;
}

使用特权

评论回复
9
elecintop|  楼主 | 2014-4-28 22:54 | 只看该作者
读者对上面的示例代码中
           //***************************                     //***********
           //将节点添加到链表末尾         与        //输出链表
           //***************************                    //***********
这两段代码中的while控制条件,指针相关操作等细节可能不是很明白,难以形成直观的理解。没关系,我们这节先关注链表的整体结构,形成对链表的初步理解,在下一篇**中,将给你形象直观的解析。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

1329

帖子

3

粉丝