单链表主函数怎么写c语言 单链表的基本操作代码c语言

数据结构单链表用c语言如何实现# includestdio.h
# includestdlib.h
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}LinkList;
LinkList *head,*p,*s;
int i,j,x,count,length,choices;
LinkList (*CreatList)()//创建单链表
{
int t;
LinkList *r;
head=(LinkList*)malloc(sizeof(LinkList));
r=head;
scanf("%d",t);
while(t!=-1){
s=(LinkList*)malloc(sizeof(LinkList));
s-data=https://www.04ip.com/post/t;
r-next=s;
r=s;
scanf("%d",t);
}
r-next=NULL;
return head;
}
LinkList DispList(LinkList *head)//输出单链表
{
for(p=head-next;p;p=p-next)
printf("]",p-data);
printf("\n");
}
int ListLength(LinkList *head)//计算单链表长度并输出
{
length=0;
p=head-next;
while(p!=NULL){
p=p-next;
length;
}
printf("]\n",length);
}
LinkList GetElem(LinkList *head,int i)//查找某一元素并输出
{
j=0;
LinkList *p;
p=head;
scanf("%d",i);
while((p-next!=NULL)(ji)){
p=p-next;
j;
}
if(i==j) printf("]\n",p-data);
else printf("NULL\n");
}
LinkList LocateElem(LinkList *head,int x)//查找某一元素的位置并输出
{
p=head-next;
count=1;
scanf("%d",x);
while(p!=NULL){
if(p-data!=x){p=p-next; count;}
else break;
}
if(count=length) printf("]\n",count);
else printf("error\n");
}
LinkList ListInsert(LinkList *head,int i,datatype x)//在某一位置插入某一元素
{
j=1;
p=head-next;
s=(LinkList*)malloc(sizeof(LinkList));
scanf("%d%d",i,x);
while(ji-1p!=NULL){
p=p-next;
j;
}
s-data=https://www.04ip.com/post/x;
s-next=p-next;
p-next=s;
DispList(head);
ListLength(head);
}
LinkList ListDelete(LinkList *head,int i)//删除某一位置的元素
{
j=1;
p=head-next;
scanf("%d",i);
while(ji-1){
p=p-next;
j;
}
s=p-next;
p-next=s-next;
free(s);
DispList(head);
ListLength(head);
}
int DestroyList(LinkList*head)//释放单链表
{
p=head-next;
while(p-next!=NULL){
s=p;
p=p-next;
free(s);
}
head=NULL;
return 0;
}
int main(void)
{
printf("0:创建单链表\n1:输出单链表\n2:计算单链表长度并输出\n3:查找某一元素并输出\n");
printf("4:查找某一元素的位置并输出\n5:在某一位置插入某一元素\n6:删除某一位置的元素\n7:释放单链表\n");
printf("说明:创建单链表以-1结束 。\n该程序的释放有点问题,但可以当清空单链表来用 。\n请选择:");
while(scanf("%d",choices)){
switch(choices){
case 0:CreatList();break;//创建单链表
case 1:DispList(head);break;//输出单链表
case 2:ListLength(head);break;//计算单链表长度并输出
case 3:GetElem(head,i);break;//查找某一元素并输出
case 4:LocateElem(head,x);break;//查找某一元素的位置并输出
case 5:ListInsert(head,i,x);break;//在某一位置插入某一元素
case 6:ListDelete(head,i);break;//删除某一位置的元素
case 7:DestroyList(head);printf("该程序释放后不能选择输出");break;//释放单链表
}
printf("请选择:");
}
return 0;
}
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语言主函数建立一条单向链表#include stdio.h
#include malloc.h#define N 5
typedef struct LNode
{
double data;
long number;
struct LNode *next;
}LNode,*LinkList;LinkList fun(LinkList L,double *aver)
{
LinkList p,q,h;
double sum=0;
p=L-next;
while(p!=NULL)
{
sum =p-data;
p=p-next;
}
sum=sum/N;
*aver = sum;
printf("aver=%.2f\n",*aver);
p=L-next;
h=(LinkList)malloc(sizeof(LNode));
h-next = NULL;
while(p!=NULL)
{
if(p-data=https://www.04ip.com/post/sum)
{
q=(LinkList)malloc(sizeof(LNode));
q-number = p-number;
q-data=https://www.04ip.com/post/p-data;
q-next = h-next;
h-next = q;
}
p=p-next;
}
return h;
}
void main()
{
LinkList L,p,h;
int i;
double aver;
L= (LinkList)malloc(sizeof(LNode));
L-next = NULL;
printf("创建链表...\n输入学生的学号和成绩:\n");
for( i=0;iN;i)//逆位序输入N个元素的值,建立带头结点的单链表L
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d %lf",p-number,p-data);
p-next=L-next;
L-next=p;
}
h=fun(L,aver);
printf("平均成绩为:%.2f\n",aver);
p=h-next;
printf("大于或等于平均成绩的学生信息...\n");
printf("学号成绩\n");
while(p!=NULL)
{
printf("%-12d%-3.2f\n",p-number,p-data);
p=p-next;
}
printf("\n");
}
请问这个链表主函数怎么写?(用C语言,可以从键盘输入n个数实现)哥们你这是数据结构上的吧 。。。。。。学数据结构要灵活 。。。。。
这里给你一个建立链表的程序:(以SDUTOJ2116题为例题)
#include iostream
using namespace std;
class List
{
public:
int data;//数据域单链表主函数怎么写c语言,用来记录数据
List *next;//指着域,用来记录它下一个节点的地址
//访问这个变量能找到它的下一个节点
};
void del(List *p)//递归释放内存
{
if(p == NULL)//p为NULL说明p访问到链表结尾单链表主函数怎么写c语言了
return ;//访问到结尾返回
del(p-next);//如果没访问到结尾 , 会在这里一直调用函数本身递归,直到遇见NULL
delete p;//遇到NULL返回到head的时候,从后向前删除节点 , 释放内存
//如果从前面删除的话就会把本节点的next值也给删除了,就没办法访问到下一个节点了
//如果定义一个临时变量先记录下一个节点地址然后再删除本节点也是可以解决这个问题的
}
//void del(List *head)
//{
//List *p = head,*q;
//while(p)
//{
//q = p;
//p = p-next;
//delete q;
//}
//}//这样释放内存也是可以的
int main()
{
List *head = new List;//new开辟内存,地址赋给head,head代表这个
//链表的头,访问head能找到这个链表
head-next = NULL;//初始状态下只有head链节,他没有后继结点,所以他的next值为NULL(空)
List *p,*q;//p是游动指针,建立链表的时候永远指向最后一个链节
//q是开新内存用的,也就是增加一个新的链节
int n;//输入数的个数
cinn;
p = head;//初始状态下只有head一个链节,那么最后一个链节也是head,让p指向head
for(int i = 0;in;i)
{
q = new List;//增加新的链节q
cinq-data;//给新链节的data赋值
p-next = q;//把q挂在p(初始值是head)的后面
q-next = NULL;//新链节是链表的最后一个链节,后面没有后继,那么,就把他的next值设为NULL(空)
p = q;//q成为p的后继之后,q就是最后一个节点,我们规定p指向最后一个节点 , 这里就把q赋给p
}//循环完成后,链表就建立完了,head是他们的头
p = head-next;//p在上面是指向最后一个元素,以便于增加新的链节后能很快的放在它的后面,达到添加链节的目的
//现在我们就发动他的游动特点,来访问整个链表,从上面看来,我们输入的第一个整数放在q-data
//里面了,并没有放在head里面,那么 , 我们访问的话,head的下一个节点才是第一个存储节点,用p
//访问head的next,判就指向了链表中的第一个存储输入数的节点(真正第一个节点是head,因为head
//因为head的data没有值 , 所以,我们说head的后面第一个节点为有效节点)
while(p != NULL)//当p访问不到NULL的时候,就会一直循环 , NULL是链表结束的标志
{
coutp-data;//输出p访问到的每个节点的data值
if(p-next != NULL)
cout" ";//这两行是调格式的,为了能在最后不多输出空格 , 其实只是为了在OJ上AC
p = p-next;//p访问把本节点的next值,p就指向下一个节点 , 相当于向后移动一个节点
}
coutendl;
del(head);//释放内存
return 0;
}
【单链表主函数怎么写c语言 单链表的基本操作代码c语言】单链表主函数怎么写c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于单链表的基本操作代码c语言、单链表主函数怎么写c语言的信息别忘了在本站进行查找喔 。

    推荐阅读