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

单向链表c语言

发布时间: 2022-07-21 18:07:12

c语言单向链表

name 保存在结构体单元的name[20] 数组里;
typedef struct node
{
char name[20];
struct node *link;
}stud;
这是你前面定义的结构体变量,一个单元包含两个部分,一个用来存储name的数组name[20],一个用来存放下一个单元地址的指向结构体node的指针。
假设该单元的地址是p,那么p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址。

--------------》你看不懂的部分如下《-----------------
p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name); /*在当前结点s的数据域中存储姓名*/
s->link=NULL;
p=s;
}

在这段代码前面是分配一个结构体单元空间,s是这个新分配空间的地址,p是链表的尾节点的地址,以链表形式说,新分配的应当跟在它后面。
按上面所讲,p->link用来存放下一单元的地址,因此有:
p->link=s; 这样新节点就成为链表的一部分了。

printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name);
这两句,是对将需要输入的名字读入并且存放在新节点用于存放name 的数组中。

此时,刚开辟的新节点成了尾节点,尾节点不指向任何其它节点,因此s->link=NULL;(NULL是空指针)
(C中处理指针需要小心行事)

p=s; 将p变量赋值为s,即让其为尾节点的地址,便于继续添加节点。

② C语言实现一个单向链表linked List

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
structnode
{
intdata;
structnode*next;
};
intmain()
{
structnode*h=NULL,*p;
inti;
ints1,s2,s3;

srand(time(NULL));
for(i=0;i<5;i++)
{
if(h==NULL)
h=p=(structnode*)malloc(sizeof(structnode));
else
p=p->next=(structnode*)malloc(sizeof(structnode));

p->data=rand()%10+1;
}
p->next=NULL;
s1=s2=s3=0;
for(p=h;p;p=p->next)
{
if(p->data%2==1)s1+=p->data;
elses2+=p->data;
s3+=p->data;
}
printf("all=%dodd=%deven=%d ",s3,s1,s2);

while(h)
{
p=h->next;
free(h);
h=p;
}
return0;
}

③ C语言单链表

C语言创建单链表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

intdata;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L->next=NULL;

printf("请输入第1个数据:");

scanf("%d",&c);

L->data=c;

for(int i=2;i<=n;i++)

{

s=(List)malloc(sizeof(node));

printf("请输入第%d个数据:",i);

scanf("%d",&c);

s->data=c;

s->next=L;

L->next =s;

}

printf("链表创建成功!");

}

void main()

{

int n;

printf("请你输入链表的个数:");

scanf("%d",&n);

create(n);

}

④ 求问c语言单向链表和双向链表与循环链表的区别

打个比方。把链表节点看作是一个人,把链表指针看作是人的手(左手是前向指针,右手是后向指针)。
非循环的单向链表是这样的:若干个人排成一排,每个人都抬起右手指向他右边的人,最右边的人的右手指向了空气(NULL)。如果要想找到这一排中任意一个人,必须从排头(链表头)开始沿手指的方向挨个查找。
循环单向链表是这样的:若干个人围成一圈,每个人都抬起右手指向他右边的人,这样每个人的右手都能指到一个人(如果只有一个人,那么他的右手指向自己)。从任意一个人开始,沿着手指的方向,可以不停地循环找到每一个人。
非循环的双向链表是这样的:若干个人排成一排,每个人都抬起左手指向他左边的人,并且每个人都抬起右手指向他右边的人,那么最左边的人的左手指向了空气(NULL),最右边的人的右手指向了空气(NULL)。如果要想找到这一排中某个目标人,从任意一个人开始,可以沿左手方向尝试查找,如果找不到,可以继续沿右手方向查找,直到找到目标人。
循环双向链表是这样的:若干个人围成一圈,每个人都抬起左手指向他左边的人,并且每个人都抬起右手指向他右边的人,这样每个人的左右手都可以指到一个人(如果只有一个人,那么他的左右手都指向自己)。无论选择左手方向还是右手方向,都可以不停地循环找到每一个人。

⑤ 用C语言编程(创建一个单向链表)

设计程序
创建一个
单向链表
,并输出链表中数据。要求:从键盘
输入数据
元素个数
和值
,并在此基础上实现单

⑥ C语言 单向链表如何排序

void link_order(STU *p_head)

{

STU *pb, *pf, temp;

pf = p_head;

if(p_head == NULL) {//链表为空

printf("needn't order. ");

return ;

}

if(p_head->next == NULL) {//链表有1个节点

printf("only one print, needn't order. ");

return ;

}

while(pf->next != NULL) {//以pf指向的节点为基准节点

pb = pf->next;//pb从基准点的下一个节点开始

while(pb != NULL) {

if(pf->num > pb->num) {

temp = *pf;

*pf = *pb;

*pb = temp;

temp.next = pf->next;

pf->next = pb->next;

pb->next = temp.next;

}

pb = pb->next;

}

pf = pf->next;

}

return ;

}

(6)单向链表c语言扩展阅读:

链表的排序有三种情况:

1、链表为空时:不用排序;

2、链表中有一个节点:不用排序;

3、链表中两个及其以上节点时:排序。

return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。

return语句用来结束循环,或返回一个函数的值。

1、return 0,说明程序正常退出,返回到主程序继续往下执行。

2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。

热点内容
b树磁盘存储 发布:2025-01-31 19:42:53 浏览:837
联想小新air15怎么配置环境 发布:2025-01-31 19:06:57 浏览:968
什么配置玩3a 发布:2025-01-31 19:05:22 浏览:586
phpoa系统 发布:2025-01-31 18:58:42 浏览:10
值e的编程 发布:2025-01-31 18:57:06 浏览:977
安卓手机的软件认证在哪里 发布:2025-01-31 18:57:01 浏览:535
android弹出来 发布:2025-01-31 18:56:56 浏览:232
办公室白领新解压方法 发布:2025-01-31 18:55:23 浏览:558
摩斯密码短长是什么意思 发布:2025-01-31 18:50:17 浏览:587
类的访问修饰 发布:2025-01-31 18:42:46 浏览:933