c语言创建单链表函数 如何用c语言实现单链表的创建并输出

C语言单链表创建1 bulid函数返回的是int,但是你用head来接收返回值
2 bulid函数的参数是LNode的指针,在bulid中为参数申请的内存是不能通过函数参数得到的
例如 , fun(int a)在函数中无法改变a,fun(int *a)中可以改变*a的值(值传递和指针传递的关系) 。
修改方法,将参数改成LNode **head,调用改成bulid(head);或者bulid的返回值为LNode *,不需要参数,head=bulid();
3 p=head-next;有问题,之后的链表是断裂的,改称q=head-next
C语言建立带头结点的单链表单链表的生成有2种方式:头插法和尾插法 。
1、头插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistHead()
* 函数功能:利用头插法创建链表
* 参数:无
* 返 回 值:创建完链表后的链表头结点
* 说明:无
*********************************************************************/
【c语言创建单链表函数 如何用c语言实现单链表的创建并输出】extern linklist *CreateLinklistHead()
{
int x, i, nodeNum;
linklist *head, *temp;// 头结点与临时结点
head = (linklist *)malloc(sizeof(linklist));// 生成表头结点
head-next = NULL;// 给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d", nodeNum);
for(i=1; i=nodeNum; i)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", x);
temp = (linklist *)malloc(sizeof(linklist));// 生成新的结点
temp-data = https://www.04ip.com/post/x;// 对新结点的数据域赋值
// 将新结点插到头结点之后
temp-next = head-next;
head-next = temp;
}
return head;// 返回新建链表的头结点
}
2、尾插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistRear()
* 函数功能:利用尾插法创建链表
* 参数:无
* 返 回 值:创建完链表后的链表头结点
* 说明:无
*********************************************************************/
extern linklist *CreateLinklistRear()
{
int x, i, nodeNum;
linklist *head, *rear, *temp;// 定义头结点、尾结点和临时结点
head = (linklist *)malloc(sizeof(linklist));// 生成表头结点,表头结点不存放数据
head-next = NULL;// 将表头结点的指针域赋值为NULL
rear = head;// 将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d", nodeNum);
for(i=1; i=nodeNum; i)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", x);
temp = (linklist *)malloc(sizeof(linklist));// 生成新的结点
temp-data = https://www.04ip.com/post/x;// 新增结点的数据域
temp-next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear-next = temp; // 使前一个结点指向新增结点(head-next=temp)
rear = temp;// 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head-next)
}
//rear-next = NULL;// 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
return head;// 返回头结点
}
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)==1buf[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
//以上程序直接加到主函数中运行正常
c语言用函数创建单链表#includestdio.h
#includestdlib.h
//链表定义
typedef int ElemType;
typedef structLNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
*链表函数*
*************************************/
//链表初始化
void InitLink(LinkList L);
//创建函数,尾插法
void CreateLink_T(LinkList L,int n);
//创建函数,头插法
void CreateLink_H(LinkList L,int n);
//销毁函数
void DestroyLink(LinkList L);
//判断是否为空函数
bool EmptyLink(LinkList L);
//获取函数
bool GetLink(LinkList L,int i,inte);
//插入函数
void InsertLink(LinkList L,int i,int e);
//删除函数
void DeleteLink(LinkList L,int i,int e);
//遍历函数
void TraverseLink(LinkList L);
//链表长度函数
int LengthLink(LinkList L);
//合并函数
void MergeLink(LinkList L1,LinkList L2);
void main()
{
LinkList L1,L2;
InitLink(L1);
InitLink(L2);
CreateLink_H(L1,2);
CreateLink_T(L2,2);
TraverseLink(L1);
printf("\n");
TraverseLink(L2);
printf("\n");
MergeLink(L1,L2);
TraverseLink(L1);
TraverseLink(L2);
}
//创建函数,尾插法
void InitLink(LinkList L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("Init error\n");
return;
}
L-next=NULL;
}
void CreateLink_T(LinkList L,int n)
{
if(n1)
{
printf("n must =1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(int i=0;in;i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p
printf("enter the data :\t");
scanf("%d",(p-data));
p-next=L-next;
L-next=p;
}
}
}
//创建函数,头插法
void CreateLink_H(LinkList L,int n)
{
if (n1)
{
printf("n must =1\n ");
return;
}
else
{
//L=(LinkList)malloc(sizeof(LNode));
LinkList pre=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
pre=L;
for(int i=0;in;i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",(p-data));
pre-next=p;
pre=p;
}
pre-next=NULL;
}
}
//销毁函数
void DestroyLink(LinkList L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p-next;
free(q);
}
L-next=NULL;
}
//判断是否为空函数
bool EmptyLink(LinkList L)
{
if (NULL==L-next)
{
return true;
}
else
{
return false;
}
}
//获取函数
bool GetLink(LinkList L,int i,int e)
{
if (i1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L-next;
int j=1;
while(pji)
{
p=p-next;
j;
}
if (!p||ji)
{
return false;
}
else
{
e=p-data;
return true;
}
}
}
//插入函数
void InsertLink(LinkList L,int i,int e)
{
if (i0||iLengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p(ji))
{
p=p-next;
j;
}
if (!p||ji)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q-data=https://www.04ip.com/post/e;
q-next=p-next;
p-next=q;
}
}
}
//删除函数
void DeleteLink(LinkList L,int i,int e)
{
if(i=0||iLengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(pji-1)
{
p=p-next;
j;
}
if(!p||ji)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p-next;
e=p-next-data;
p-next=p-next-next;
free(q);
}
}
}
//遍历函数
void TraverseLink(LinkList L)
{
LinkList p=L-next;
if(!p)
{
printf("the Link L is empty\n");
}
while(p)
{
printf("%d\n",p-data);
p=p-next;
}
}
//链表长度函数
int LengthLink(LinkList L)
{
int i=0;
LinkList p=L-next;
while(p)
{
p=p-next;
i;
}
return i;
}
//合并函数
void MergeLink(LinkList L1,LinkList L2)
{
int i=0,flag=0;
LinkList p1=L1-next,p2=L2-next;
LinkList p=(LinkList)malloc ((LengthLink(L1) LengthLink(L2) 2)*sizeof(LNode));
LinkList pre=p;
if (!p)
{
printf("MergeLink error\n");
return;
}
p-next=NULL;
while (p1p2)
{
if (p1-data=https://www.04ip.com/post/p2-data)
{
InsertLink(p,i,p2-data);
p2=p2-next;
}
else
{
InsertLink(p,i,p1-data);
p1=p1-next;
}
}
while (p1)
{
InsertLink(p,i,p1-data);
p1=p1-next;
}
while(p2)
{
InsertLink(p,i,p2-data);
p2=p2-next;
}
while(pre)
{
pre=pre-next;
}
LinkList q=L1;
L1=p;
DestroyLink(q);
DestroyLink(L2);
}
c语言创建单链表函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何用c语言实现单链表的创建并输出、c语言创建单链表函数的信息别忘了在本站进行查找喔 。

    推荐阅读