当前位置:首页 » 编程语言 » c语言链表

c语言链表

发布时间: 2022-01-10 17:26:33

A. c语言链表

嗨 又是个新注册的号 太不可信了 这年头新注册的号 真是不靠谱
没准辛辛苦苦做出来的题目 却被不了了之了 缺乏诚信啊

B. 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);
}

D. c语言中的链表是什么

就是一连续内存空间,类似于数组,不过数组的内存空间一旦初始化就是不变的。
链表开始是一个“头指针”,定义了链表开始的位置,下面是像链条一样的一串节点,每个节点包含数据部分和指针部分。前一节点的指针指向后一节点,最后一个节点是数据和空地址,表示结束。
好处在于空间是动态分配的,需要多长可以一直链下去。

E. C语言链表的使用方法

D
答案D设置完,p就从链表中丢掉了。
p就是一个指向结构体node的指针。
p->next就是p包含的执行下一个node的指针,在本题,就是q。

F. C语言 链表

/*

卡号 姓名

44098 谭侃

99089 马吹

23011 赵忽悠

q

44098 谭侃

99089 马吹

23011 赵忽悠

Press any key to continue

*/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedefstructcard{
intcardnum;//卡号
charstudentname[30];//学生姓名
structcard*next;//指针域
}SCard;

SCard*Create(){
SCard*head,*p;
intid;
charname[30];
head=p=(SCard*)malloc(sizeof(SCard));
printf("卡号姓名 ");
while(scanf("%d%s",&id,name)==2){
p->next=(SCard*)malloc(sizeof(SCard));
p->next->cardnum=id;
strcpy(p->next->studentname,name);
p=p->next;
}
p->next=NULL;
returnhead;
}

voidShow(SCard*head){
SCard*p=head->next;
while(p){
printf("%d %s ",p->cardnum,p->studentname);
p=p->next;
}
}

intmain(){
SCard*head=Create();
if(head->next==NULL)printf("faileure ");
elseShow(head);
return0;
}

G. C语言链表概念

struct node
{
int data;
struct node *next;
}
这个是一个链表的定义,next就是本身的一个指针
可以这么理解,链表就是一串珠子,每个珠子就是一个结构体,next就是串珠子的线

H. 关于c语言链表

因为你只创建了一个啊,你的本意是用create函数执行创建链表的工作,不管多少个都是由它完成的,但是你的create函数明明没有while循环或者dowhile循环啊,只做了一遍啊,第一遍的if做完了,第一个链表完成了,再次scanf了之后,就退出来了啊,在你创建了一个链表之后,就在那个链表的尾部写入NULL了,程序就结束了啊,又没一直做scanf,和创建链表的工作。create没循环啊,打印链表是没错啊,输出了第一个啊,你自己创建的第一个叫head,只有后面的链接,自己本身没有存放任何数,只输出了第二个链表,第二链表的next就是NULL了,输出当然就停止了啊。

怕我没说清楚,或者把你绕晕了,所以我截个图给你看。

你这个if只做了一遍啊,没有循环啊,然后就再次用scanf了,然后呢?然后就退出if了吧,然后就执行了r->next=NULL;对吧,r不就是你创建的第一个有数据的链表吗?然后就return h了,那么只有一个啊,有循环吗?scanf了之后,也没判断数值啊,不是-1,应该继续做啊。

解决方案:在这个if的外面,加一个do while的循环,然后判断scanf读入的n的值,应该就可以了。

I. C语言链表

#include<stdio.h>
#include<stdlib.h>
#defineN8
typedefstructlist
{intdata;
structlist*next;
}SLIST;
SLIST*insertlist(SLIST*p,int*pvalue)
{
SLIST*tmp=p,*tmp_p;
intt=*pvalue;
while(tmp->next!=NULL&&tmp->next->data<t)
tmp=tmp->next;

tmp_p=(SLIST*)malloc(sizeof(SLIST));
tmp_p->next=tmp->next;
tmp_p->data=t;
tmp->next=tmp_p;
returnp;
}

SLIST*creatlist(int*a)
{
SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
q->next=NULL;
p->next=q;
p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{
/*这里输出链表中各个数据*/
SLIST*tmp=h->next;
while(tmp!=NULL){
printf("%d",tmp->data);
tmp=tmp->next;
}
}
intmain(void)
{
SLIST*head;
inta[N];
intnvalue,i;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&nvalue);//插入的结点数据
head=creatlist(a);
head=insertlist(head,&nvalue);
outlist(head);
return0;
}

J. c语言链表

指针在x86系统里大小是32位4个字节,在64位系统是8字节大小。指针好比一个盒子,盒子里有个东西也就是它指向的内容,内容是一个实体对象的首地址。盒子本身不能存放实体对象,就好比盒子里有张名片,通过名片你可以找到这个人,总不能把人放盒子里吧。
得有这个人然后把找到这个人的名片放盒子里。

热点内容
聚合脚本平台 发布:2024-09-20 17:51:55 浏览:180
访问拦截怎么解除安卓 发布:2024-09-20 17:28:48 浏览:275
萝卜干存储 发布:2024-09-20 17:21:37 浏览:715
苹果手机如何迁移软件到安卓手机 发布:2024-09-20 17:21:34 浏览:692
查看服务器ip限制 发布:2024-09-20 16:56:27 浏览:389
p搜系统只缓存1页为什么 发布:2024-09-20 16:48:51 浏览:839
上网的账号和密码是什么东西 发布:2024-09-20 16:31:31 浏览:612
安卓手机王者荣耀如何调超高视距 发布:2024-09-20 16:31:30 浏览:428
安卓G是什么app 发布:2024-09-20 16:23:09 浏览:81
iphone怎么压缩文件 发布:2024-09-20 16:08:18 浏览:356