当前位置:首页 » 编程语言 » c语言单链表
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言单链表

发布时间: 2022-02-04 07:06:50

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语言如何创建单链表

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语言链表问题

#include
"malloc.h"
struct
num
{
int
a;
struct
num
*next;
};
void
main()
{
int
i,n=0;
struct
num
*head,*p1,*p2;
head=(struct
num
*)
malloc(sizeof(struct
num));
p1=head;
/*p2=head;*/
for
(i=0;i<5;i++)
{
p2=(struct
num
*)
malloc(sizeof(struct
num));
scanf("%d",&n);
p2->a=n;
p1->next=p2;
p1=p2;
}
p1->next=NULL;
p1=head->next;
while(p1!=NULL)
{
printf("%d
",p1->a);
p1=p1->next;
}
printf("\n");
}
***********************************************************
#include
"malloc.h"
struct
num
{
int
a;
struct
num
*next;
};
void
main()
{
int
i,n=0;
struct
num
*head,*p1,*p2;
head=(struct
num
*)
malloc(sizeof(struct
num));
p1=head;
/*p2=head;*/
for
(i=0;i<5;i++)
{
p2=(struct
num
*)
malloc(sizeof(struct
num));
scanf("%d",&(p2->a));
p1->next=p2;
p1=p2;
}
p1->next=NULL;
p1=head->next;
while(p1!=NULL)
{
printf("%d
",p1->a);
p1=p1->next;
}
printf("\n");
}

{
http://chinastar.uueasy.com/read-htm-tid-292-fpage-6.html}
可以看一下这篇文章,链表创建输出

④ c语言链表

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

⑤ c语言单向链表的问题

完善了一下,头结点没存数,print时要从第二个开始:
#include<stdio.h>
#include<stdlib.h>
struct
node{
int
num;
struct
node
*next;
};
//构建空的链表
void
InitList(struct
node
*&L){//修改
L
=
(struct
node*)malloc(sizeof(struct
node));
L->next
=
NULL;
L->num=0;
printf_s("InitList
sucess!");
}
//创建单链表
void
CreateList(struct
node
*&L,int
n){//修改
struct
node
*temp,*p;
L
=
(struct
node*)malloc(sizeof(struct
node));
L->next
=
NULL;
L->num=0;
temp=L;
for
(int
i
=
0;
i
<
n;
i++){
p
=
(struct
node*)malloc(sizeof(struct
node));
scanf_s("%d",
&p->num);
temp->next
=
p;
temp
=
p;
}
temp->next
=
NULL;
}
void
PrintList(struct
node
*L){
struct
node
*temp
=
L->next;//修改,头结点不使用
while
(temp
!=
NULL){
printf("%d",
temp->num);
temp
=
temp->next;
}
}
void
PrintMenu(){
printf_s("------Menu------\n");
printf_s("0
InitList\n");
printf_s("1
CreateList\n");
printf_s("2
PrintList\n");
}
void
main(){
int
n,c;
struct
node
*La;
c=1;
while(c>=0)
{
PrintMenu();
printf_s("Enter
the
command:
");
scanf_s("%d",
&c);
switch
(c){
case
0:
InitList(La);
break;
case
1:
printf_s("Enter
the
number
of
LinkList:
");
scanf_s("%d",
&n);
CreateList(La,
n);
break;
case
2:
PrintList(La);
break;
default:
printf_s("ERROR,Enter
again:
");
break;
}
}
struct
node
*te;//增加释放空间
if(La)
{
te=La->next;
free(La);
La=te;
}
system("pause");
}

⑥ C语言单链表合并

#include<stdio.h>#include<stdlib.h>structlist{intdata;structlist*next;};//两个链表融合,插入排序函数voidsort(structlist*l1,structlist*l2);//输出链表voidoutput(structlist*head);//输入链表voidinput(structlist*head,intnum);intmain(){intn;list*h1,*h2;//两个链表的头,下面四行初始化链表h1=(structlist*)malloc(sizeof(structlist));h2=(structlist*)malloc(sizeof(structlist));h1->next=NULL;h2->next=NULL;//两个链表输入printf("请输入第一个链表节点数: ");scanf("%d",&n);input(h1,n);printf("请输入第二个链表节点数: ");scanf("%d",&n);input(h2,n);//合并链表并排序sort(h1,h2);//输出合并后的链表output(h1);}voidinput(structlist*head,intnum){structlist*tmp;structlist*end;end=head;printf("请输入链表节点: ");for(inti=0;i!=num;i++){tmp=(structlist*)malloc(sizeof(structlist));scanf("%d",&tmp->data);end->next=tmp;tmp->next=NULL;end=tmp;}}voidsort(structlist*l1,structlist*l2){structlist*p1,*p2,*tmp;p1=l1;p2=l2->next;while(p1->next&&p2){if(p1->next->data>p2->data){tmp=p2->next;p2->next=p1->next;p1->next=p2;p2=tmp;}elsep1=p1->next;}if(p2)p1->next=p2;}voidoutput(structlist*head){while(head->next){printf("%d",head->next->data);head=head->next;}}

⑦ C语言链表···

struct date{…}/链表结构体
p1/定义链表结构体的一个指针名插入点/
p1=(struct date *)malloc(sizeof(struct date))/分配链表内存
free(newnode)/释放节点内存
删除全部节点定义两个链表指针名p1,p2循环删除
while(p1->next!=NULL)
{p2=p1;
p1->…/p1指向下链表一节点
free(p2);
}

⑧ c语言创建链表

1、你使用了malloc函数但没有导入头文件malloc.h。
2、函数DATA *create(int n);没有申明就直接调用。
(另外main函数中DATA* head;给个初值NULL,避免野指针。)
修改以上内容,亲测可运行。

⑨ C语言链表相关

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

typedefstructnode{
charname[21];
intnumber;
charsex;
structnode*next;
}linklist;

linklist*CreateList(){
charname[21]="";
linklist*head,*p;
p=head=(linklist*)malloc(sizeof(linklist));//这是头结点
scanf("%s",name);
while(name[0]!='#'){
p->next=(linklist*)malloc(sizeof(linklist));
strcpy(p->next->name,name);
scanf("%d",&p->next->number);
scanf("%c",&p->next->sex);
p=p->next;
fflush(stdin);
scanf("%s",name);
}
p->next=NULL;
returnhead;
}

voidDelete(linklist*head,linklist*t){
linklist*p=head->next;
while(p)p=p->next;
p->next=t->next;
free(t);
}

linklist*Locate(linklist*head,intnum){
linklist*p=head->next;
while(p){
if(p->number==num)returnp;
p=p->next;
}
returnNULL;
}

voidOutput(linklist*head){
linklist*r=head->next;
while(r){
printf("%s%d%c ",r->name,r->number,r->sex);
r=r->next;
}
}

intmain(void){
intnum;
linklist*L;
linklist*p;
printf("输入学生信息:");
L=CreateList();
Output(L);
fflush(stdin);
printf("输入要删除学生的学号:");
scanf("%d",&num);
p=Locate(L,num);
if(p==NULL){
printf("No ");
return1;
}
else{
Delete(L,p);
Output(L);
}
return0;
}

⑩ 关于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的值,应该就可以了。