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

C语言程序中怎样创建链表

发布时间: 2022-07-24 00:32:45

A. 用c语言创建链表

void CreateList_H(Linklist L,int n)中的L是局部变量,你生成的头结点L不能被返回,应该改为:
Linklist CreateList_H(int n)
调用方式和函数内部返回值都需要相应改动。

B. C语言 关于链表的创建

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

typedefintelemtype;
typedefstructLnode{
elemtypedata;
Lnode*next;
}Lnode;

Lnode*CreatList(Lnode*Head){
Head=(Lnode*)malloc(sizeof(Lnode));
Head->next=NULL;
Lnode*p=Head;
printf("请输入元素的个数:");
inti,n;
scanf("%d",&n);
for(i=0;i<n;++i){
p->next=(Lnode*)malloc(sizeof(Lnode));
printf("请输入第%d个元素:",i+1);
scanf("%d",&p->next->data);
p=p->next;
}
p->next=NULL;
returnHead;
}

voidAllList(Lnode*head){
Lnode*p=head->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf(" ");
}

intmain(){
Lnode*head=NULL;
head=CreatList(head);
AllList(head);
return0;
}

C. C语言中怎么定义链表,最好把各个代码都详细的解释一下!

/*creat
a
list*/
#include
"stdlib.h"
#include
"stdio.h"
struct
list
{
int
data;
struct
list
*next;
};
typedef
struct
list
node;
typedef
node
*link;
void
main()
{
link
ptr,head;
int
num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please
input
5
numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4)
ptr->next=NULL;
else
ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{
printf("The
value
is
==>%d\n",ptr->data);
ptr=ptr->next;
}
}
上面是一个简单的创建链表的C程序。所谓链表形象的讲就是一个数据块里面存有数据,并且存有下一个数据的指针,这样一个指一个形成一个数据链。这个数据链可以被操作,例如插入数据,删除数据,等。至于指令,首先定义一个结构体,它存有数据和指向下一个数据块的指针。然后分配空间。注意最后一个为NULL,当然你也可以指向开头一个数据块形成一个循环链表。

D. 怎样创建一个线性链表(C语言)

/*线性链表的构建*/
#include<stdio.h>
#include<stdlib.h>

typedefstructLnode
{
intdata;
structLnode*next;
}Lnode;

intmain()
{
Lnode*H,*p1,*p2,*p3,*p4;
H=(Lnode*)malloc(sizeof(Lnode));
p1=(Lnode*)malloc(sizeof(Lnode));
p2=(Lnode*)malloc(sizeof(Lnode));
p3=(Lnode*)malloc(sizeof(Lnode));
p4=(Lnode*)malloc(sizeof(Lnode));

p1->data=132;
p1->next=p2;
p2->data=942;
p2->next=p3;
p3->data=158;
p3->next=182;
p4->data=231;
p4->next=NULL;

printf("%d,%d ",p1->data,p3->data);
printf("%d",p1->next->data);

return0;
}

E. 在c语言中如何创建一个链表

typedef struct Node
{
int data;
struct Node*pNext;
}Node;
Node*pNode=(Node*)malloc(sizeof(Node));

F. 如何用C语言创建一个链表,实现增、删、改、查

#include<stdio.h>
#include<string.h>
#include <malloc.h>
//先定义一种student类型,表示一个学生的信息,如下:
typedef struct student
{
int num; //表示学号
char name[30]; //表示姓名
float score; //表示分数
}student;
//定义一种NODE类型,表示一个结点信息,如下:
typedef struct node
{
student st; //表示一个学生的信息
struct node *next; //表示一个NODE类型的指针
}NODE;
//1、写出建立一个带头结点的线性链表的函数,其中每个结点包括学号、姓名、分数三个数据域。函数形式如下:
NODE *creat_link(int direction)
{
NODE *head,*p,*tail;
int xh,i=1;
if(direction==1) //当direction的值为1时,新建立的结点连到尾部
{
tail=head=(NODE *)malloc(sizeof(NODE));
head->next=NULL;
printf("请输入第%d个学生的学号:",i);
scanf("%d",&xh);
while(xh>0) //从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕
{
p=(NODE *)malloc(sizeof(NODE));
p->st.num=xh;
printf("请输入第%d个学生的姓名:",i);
scanf("%s",p->st.name);
printf("请输入第%d个学生的成绩:",i);
scanf("%f",&p->st.score);
p->next=NULL;
tail->next=p;
tail=p;
i=i+1;
printf("请输入第%d个学生的学号:",i);
scanf("%d",&xh);
}
}
else if(direction==0) //当direction为0时,新建立的结点成为第一个结点
{
head=(NODE *)malloc(sizeof(NODE));
head->next=NULL;
printf("请输入第%d个学生的学号:",i);
scanf("%d",&xh);
while(xh>0) //从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕
{
p=(NODE *)malloc(sizeof(NODE));
p->st.num=xh;
printf("请输入第%d个学生的姓名:",i);
scanf("%s",p->st.name);
printf("请输入第%d个学生的成绩:",i);
scanf("%f",&p->st.score);
p->next=head->next;
head->next=p;
i=i+1;
printf("请输入第%d个学生的学号:",i);
scanf("%d",&xh);
}
}
return head;
}
//2、写出输出上述链表各结点数据域值的函数。该函数对应的函数需要一个形参,表示链表的头指针,形式如下:
void print_link(NODE *head)
{
NODE *p;
p=head->next;
printf("%-10s%-20s%-10s\n","学号","姓名","分数");
while(p!=NULL)
{
printf("%-10d%-20s%-10.1f\n",p->st.num,p->st.name,p->st.score);
p=p->next;
}
//该函数能输出head所指的链表的所有结点值,输出形式如下:
/*本函数输出线性表sq中所有数据,形式如下:
学号 姓名 分数
12 张三 234.5
18 李四 987.7
……… ……… …….*/
}
//3、写出在链表中删除结点的函数
int del_link(NODE *head,char name[])
{
NODE *p,*p1;
p=head->next;
p1=head;
while(p!=NULL)
{
if(strcmp(p->st.name,name)!=0)
{
p1=p;
p=p->next;
}
else
{
break;
}
}
if(p!=NULL)
{
p1->next=p->next;
free(p);
return 1;
}
else
{
return 0;
}
//删除head所指的链表中,名字为name的结点,删除成功返回1,不成功返回0
}
//4、写出在链表中插入结点的算法
int insert(NODE *head,student x,int wz)
{
NODE *p=head;
int i=0,jg;
if(wz<=0)
{
jg=0;
}
else
{
while(i<wz-1&&p!=NULL)
{
i++;
p=p->next;
}
if(p==NULL)
{
jg=0;
}
if(i=wz-1)
{
//找到wz前面的节点,p指向它
NODE *q;
q=(NODE *)malloc(sizeof(NODE));
q->st.num=x.num;
strcpy(q->st.name,x.name);
q->st.score=x.score;
q->next=p->next;
p->next=q;
jg=1;
}
}
return jg;
//该函数能够在wz这个结点之前,插入一个新结点,新结点的数据域为x。插入成功返回1,不成功返回0。
}
//5、写出主函数,分别调用上面算法所对应的程序,建立链表,并输出链表的值。
void main()
{
NODE *head; //定义指针变量head
int wz; //表示插入位置
char xm[30];
student st; //定义一个变量st,用来表示一个学生的信息
head=creat_link(1);
print_link(head); //调用函数建立链表,并把返回值送给head;
//调用函数,输出链表中各个结点的值
//输入一个学生的有关信息,送给变量st的有关成员
printf("\n\n请输入要插入的位置:");
scanf("%d",&wz); //输入wz的值
printf("请输入要插入的学生的学号:");
scanf("%d",&st.num);
printf("请输入要插入的学生的姓名:");
scanf("%s",st.name);
printf("请输入要插入的学生的成绩:");
scanf("%f",&st.score);
//调用函数,在链表中把学生st的值作为一个结点插入,如果插入成功,输出新链表
if(insert(head,st,wz)==1)
{
printf("\n插入成功,新表为:\n");
print_link(head);
}
else
{
printf("插入不成功");
}
//调用函数,在链表中删除一个指定结点的值,如果删除成功,输出新链表
printf("\n\n请输入要删除的学生的姓名:");
getchar();
gets(xm);
if(del_link(head,xm)==1)
{
printf("\n删除成功,新表为:\n");
print_link(head);
}
else
{
printf("删除不成功");
}
}

G. C语言中单链表的创建

struct infor
{
char name[10];//学生名称
int age;//年龄
struct infor *next;//存储下一个结构的地址
};//链表的数据结构

struct infor *head=NULL;//头指针,指向第一个结构
struct infor *p,*c;//*p:是当前结构的前一个结构地址;*c:当前指针
char buf[10];//存放name的临时数组
printf("Enter name:");//提示
while(scanf("%s",buf)==1 && buf[0]!='0')//name输入0时结束
{
c=(struct infor *)malloc(sizeof(struct infor));//给结构分配内存
if(c==NULL)/无法分配内存
{
printf("No memory");
exit(1);
}
if(head==NULL)
{
head=c;//第一个结构地址
}
else
{
p->next=c;//下一个结构的地址
}
c->next=NULL;//表示最后一个结构
strcpy(c->name,buf);//拷贝name到链表中
printf("Enter age:");
scanf("%d",&c->age);//输入年龄
p=c;//指向前一个节点
printf("Enter name:");
}
c=head;
while(c!=NULL)
{
printf("name=%s age=%d\n",c->name,c->age);
c=c->next;
}//读取链表中的信息
printf("over\n");
c=head;
while(c!=NULL)
{
free(c);
c=c->next;
}//释放内存
运行结果:
Enter name:Jim
Enter age:25
Enter name:Tom
Enter age:36
Enter name:Jack
Enter age:65
Enter name:0
name=Jim age=25
name=Tom age=36
name=Jack age=65
over
//以上程序直接加到主函数中运行正常

H. 创建链表的C语言程序

typedef
struct
tagLinkList{
int
val;
struct
tagLinkList
*next;
}LinkList,*pLinkList;
void
main()
{
LinkList
*l,*h;
l=(pLinkList)malloc(sizeof(LinkList));
scanf("%d",&l->val);
h=l;
l=(pLinkList)malloc(sizeof(LinkList));
scanf("%d",&l->val);
h->next=l;
printf("1=%d\n",h->val);
l=h->next;
printf("2=%d\n",l->val);
}闲的无聊,给你写个测试的,只是引导作用,可以参考

I. 用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完整程序

这是个很简单的链表创建和输出

#include<stdio.h>

#include<stdlib.h>

typedef struct linkednode

{

char data;

struct linkednode *next;

}node,*link_list;//链表节点的结构及重命名

link_list creat()//创建一个链表返回类型是链表的首地址

{

link_list L;

node *p1,*p2;

char data;

L=(node*)malloc(sizeof(node));//开辟存储空间

p2=L;

while((data=getchar())!=' ')//输入回车键时结束输入

{

p1=(node*)malloc(sizeof(node));

p1->data=data;

p2->next=p1;

p2=p1;

}

p2->next=NULL;

return L;

}

void print(link_list L)//把链表输出

{

node *p;

p=L->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf(" ");

}

void main()

{

link_list L=NULL;

char x;

printf("请输入链表节点: ");

L=creat();

print(L);

}