c语言用函数创建单链表#includestdio.h
#includestdlib.h
//链表定义
typedef int ElemType;
typedef structLNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
*链表函数*
*************************************/
//链表初始化
void InitLink(LinkList L);
//创建函数C语言单链表保存函数,尾插法
void CreateLink_T(LinkList L,int n);
//创建函数C语言单链表保存函数,头插法
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);
}
//创建函数C语言单链表保存函数,尾插法
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)
{
【C语言单链表保存函数 c实现单链表】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里面的输入函数可以返回成功读入的内容的长度,如果失败或者是文件到了结尾就会返回-1 。所以只需要看看每次返回的值 。如果不是-1 , 继续读取下一个 , 否则停止读取 , 链表终止 。
比如:
struct list{
int i;
float f;
char c;
struct list *next;
};
输出:
struct list *l;
fprintf(fp,"%d %f %c\n",l-i,l-f,l-c);
输入:
struct list *l=0,*p;
while(1){
if(l=0){
l=(struct list *)malloc(sizeof(struct list));
l-next=0;
p=l;
}
else{
p-next=(struct list *)malloc(sizeof(struct list));
p=p-next;
p-next=0;
}
int m=fscanf(fp,"%d %f %c",(p-i),(p-f),(p-c));
if(m==-1) break;
}
C语言创建了一个链表函数,如何保存这个链表的头结点?head=(node*)malloc(sizeof(node));//创建头结点
head-next=NULL;
while(n--)
{
printf("\n请输入单链表第%d个结点的值:",i);
scanf("%d",a);
p=(node*)malloc(sizeof(node));
p-info=a;
p-next=head-next;
head-next=p;
}
追问
能不能详细一点呢
追答
#include "stdio.h"
typedef int datatype;
typedef struct link_node
{
datatype info;
struct link_node *next;
}node;
main()
{
int i=1,n,a;
node *head,*p,*q;
printf("\n本程序建立带头结点的单链表:\n");
printf("请输入你所需要建立带头结点的单链表的结点数:");
scanf("%d",a);
head=(node*)malloc(sizeof(node));
head-next=NULL;
while(a)
{
printf("\n请输入单链表第%d个结点的值:",i);
scanf("%d",n);
if(n==0)
break;
p=(node*)malloc(sizeof(node));
p-info=n;
p-next=head-next;
head-next=p;
a--;
}
if(!head-next) printf("\n单链表是空的!\n");
else
{
printf("\n单链表各个结点的值分别为:\n");
q=head-next;
while(q)
{
printf("]",q-info);/*输出非空表中第一个结点的值*/
q=q-next;/*p指向第一个结点的下一个结点*/
}
}
printf("\n");
}
C语言中如何将一个链表保存为文件?第一步:创建文件 比如说 file *fp=fopen(……);
第二步:写一个循环,把链表的节点一个一个写进文件里 。
第三部:记得关闭文件- -
关于C语言单链表保存函数和c实现单链表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 怎么在微信直播上分屏看,微信直播怎么才能同屏手机上的内容
- mysql中建立一个数据库,mysql数据库创建一个表
- 树莓派虚拟机是什么,虚拟机安装树莓派操作系统
- 深圳市区块链,深圳市区块链电子发票怎么申请
- go语言区块链需要学多久 go语言区块链应用开发从入门到精通
- flutter安全键盘,flutter 键盘顶起底部
- excel怎么把大写字母,excel怎么把大写字母变小写字母
- 带路由器的电视机怎么安装,路由器如何安在电视上
- mysql中怎么更换密码 mysql80更改密码