Ⅰ c语言中链表的具体用途
链表是一种数据结构 是一种线形的存储结构 转一个小文章
C/C++ code 准备:动态内存分配 一、为什么用动态内存分配 但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组: float score[30]; 但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大? 在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把数组定义得足够大意兄弟几个当初一家子,都在一块住,这就是数组
后来都成家了,在一起住不方便,就各自分开住了,但形式上还是一家,这就是链表
Ⅱ C语言里面的链表是什么
C语言里面的链表是一种数据结构
是一种线形的存储结构
链表和数组一样,也是将一组同类型的数据组织在一起的一种数据结构
不同的是
数组采用的是顺序存储,依靠数组的首地址和元素的相对地址(下标)来实现访问。
优点是访问方便快捷,而缺点是数组是静态的,不利于实现元素的动态增减。
而链表采用的是离散存储,依靠节点间的指向下一个节点的指针来实现访问。
其优缺点和数组相反
Ⅲ C语言当中的链表重要吗可以做什么
当你有一大堆数据需要处理时候,比如说有20万个人的个人信息需要处理,你还会用数组来存储么?这些信息中可能增加到40万,或者减少到1000,那么数组这时要么会不够,要么会造成浪费,而且你也没有办法去随便删掉其中一个,这时你就可以考虑使用链表了,链表提供的操作函数更是让此问题变得极其简单,他支持动态增长,存储方便可靠,这时你还有什么理由去使用数组而不是链表?
我只是打了一个比方,实际上针对不同的问题类型使用不同的数据结构才是核心思想,如上面的存储结构还有比链表更加优秀可靠方便的数据结构,链表只是数据结构中最基本的类型,建议楼主学学数据结构和算法,你将会对数据结构有更新的认识!
Ⅳ C语言当中的链表的主要作用有哪些大神们帮帮忙
链表的主要特点是插入的时候快速方便,不需要整块整块的移动数据,只需要改变指针的指向,但取数据的时候较慢,需要遍历链表。数组则相反,插入的时候要移动大量数据,而取数据只需根据下标直接获取。
求采纳
Ⅳ c语言 链表是什么,有什么用,它的基本结构是什么
链表不属于C语言,它是一种数据结构,在C语言中用结构体来表示链表的结点,这个结构体中包含有数据域和指向自身的指针。
可用于实现队列、堆栈等其它数据结构,以及动态存储等
Ⅵ c语言链表的用途是什么
1、链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
2、例程:
/*
*对链表的综合操作
*功能有建立,排序,插入,删除,输出
*/
#include<stdio.h>
#include<malloc.h>
typedefintElemType;
typedefstructNodeType
{
ElemTypedata;
structNodeType*next;
}NodeType,*LinkType;
LinkTypecreate()
{//建立链表,返回链表的首地址,头结点没有数据
LinkTypehead,p1,p2;
head=(LinkType)malloc(sizeof(NodeType));
p1=head;
while(p1->data!=0)//当data=0时链表结束
{
p2=p1;
p1=(LinkType)malloc(sizeof(NodeType));
printf("Enterstudent'sinformation: data=");
scanf("%d",&p1->data);
p2->next=p1;
}
p2->next=NULL;
free(p1);
return(head);
}
voidoutput(LinkTypehead)
{//链表的输出,接收链表的首地址
head=head->next;
while(head!=NULL)
{
printf("data=%d ",head->data);
head=head->next;
}
}
LinkTypesort(LinkTypehead)
{//链表排序,接收链表首地址,返回链表首地址
LinkTypeph,p1;
ElemTypetemp;
ph=head->next;
p1=head->next;
while(p1->next!=NULL)//冒泡法
{
ph=head;
while(ph->next!=NULL)
{
if(ph->data>ph->next->data)//按data由小到大排序
{
temp=ph->data;
ph->data=ph->next->data;
ph->next->data=temp;
}
ph=ph->next;
}
p1=p1->next;
}
return(head);
}
LinkTypedel(LinkTypehead)
{//删除结点,接收链表的首地址,返回链表的首地址
ElemTypeDelData;
LinkTypeph,p;
ph=head->next;
printf("Enterthedatayouwanttodel: DelData=");
scanf("%d",&DelData);
while(ph!=NULL&&ph->data!=DelData)//寻找要删除的结点
{
p=ph;
ph=ph->next;
}
if(ph==NULL)//没有找到要删除的结点
{
printf("Entererror! ");
return(head);
}
else
{
if(ph==head->next)//删除头结点
{
head->next=ph->next;
}
else//删除其它结点
{
p->next=ph->next;
}
}
free(ph);
return(head);
}
LinkTypeinsert(LinkTypehead)
{//插入结点,接收链表首地址,返回链表首地址
LinkTypeph,p,insert,temp;
insert=(LinkType)malloc(sizeof(NodeType));
printf("Enterthedatayouwanttoinsert: data=");
scanf("%d",&insert->data);
ph=head->next;
while(ph!=NULL&&ph->data<insert->data)//寻找插入的位置
{
p=ph;
ph=ph->next;
}
if(head->next->data>insert->data)//插入头部
{
temp=head->next;
head->next=insert;
insert->next=temp;
}
else//插入到其它地方
{
p->next=insert;
insert->next=ph;
}
return(head);
}
voidmain()
{
LinkTypehead;
head=create();
output(head);
printf(" ");
head=sort(head);
output(head);
printf(" ");
head=del(head);
output(head);
printf(" ");
head=insert(head);
output(head);
}
Ⅶ C语言中.二叉树的顺序存储结构和二叉链表,三叉链表存储结构各自的优缺点及适用场合.以及2叉树的顺序储存结
链式结构优点都是便于寻址,二叉链表缺点结构性开销随着数据结构的规模变大而变大(尤其是叶子节点都有2个NULL,即损失2*sizeof(ElemType*))
线性结构优点没有结构性开销,缺点个人感觉是插入和删除不够方便?
试用场合估计取决问题规模大小,即空间复杂度和时间复杂度
两个相互转化很简单,只需明白的就是顺序存储中:
当前节点的父节点Parent(CurrentPos) = (CurrentPos - 1) / 2 取下界
左孩子Left(CurrentPos) = 2*CurrentPos + 1
右孩子Right(CurrentPos) = 2*CurrentPos + 2
左兄弟 = CurrentPos - 1
右兄弟 = CurrentPos + 1
转换时只需讲链式存储结构的数据域的数据拷贝到顺序存储结构对应的位置即可
Ⅷ (1)结构体的作用是什么如何进行初始化(2)如何访问结构体中的成员(3)链表有什么优点
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
struct 结构体名{
结构体所包含的变量或数组
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
结构体定义:
第一种:只有结构体定义
struct stuff{
char job[20];
int age;
float height;
};
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义
//直接带变量名Huqinwei
struct stuff{
char job[20];
int age;
float height;
}Huqinwei;
也许初期看不习惯容易困惑,其实这就相当于:
struct stuff{
char job[20];
int age;
float height;
};
struct stuff Huqinwei;
第三种:如果该结构体只用一个变量Huqinwei,而不再需要用struct stuff yourname;去定义第二个变量。
那么,附加变量初始化的结构体定义还可进一步简化出第三种:
struct{
char job[20];
int age;
float height;
}Huqinwei;
把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。
结构体变量及其内部成员变量的定义及访问。
要分清结构体变量和结构体内部成员变量的概念。
就像刚才的第二种提到的,结构体变量的声明可以用:
struct stuff yourname;
其成员变量的定义可以随声明进行: struct stuff Huqinwei = {"manager",30,185};
也可以考虑结构体之间的赋值:
struct stuff faker = Huqinwei;
//或 struct stuff faker2;
// faker2 = faker;
打印,可见结构体的每一个成员变量一模一样
如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)
Huqinwei.job[0] = 'M';
Huqinwei.job[1] = 'a';
Huqinwei.age = 27;
Huqinwei.height = 185;
结构体成员变量的访问除了可以借助符号".",还可以用"->"访问。
Ⅸ C语言刚学的链表觉得各种不方便 总觉得结构体比这个好用太多 有没有大神能告诉我链表到底有什么优点或
链表是用来代替数组的。在需要灵活地向队列中插入数据或删除数据时,链表的优势就能体现出来了。因为数组就不能方便灵活地插入或删除数据。
链表的节点也可以是结构体。所以你不应该把链表跟结构体比较。
链表也有缺点,那就是不能象数组那样通过下标直接找到某个元素,而必需从头一个一个地“查”。
将来你学了“二叉树”时,就会发现“二叉树”是介于“链表”和“数组”之间的一种数据结构,即可以灵活地向队列中插入数据或删除数据,又可以按下标快速获取某个元素。但“二叉树”也有缺点,那就是太复杂了!