c语言用函数创建单链表
#include<stdio.h>#include<stdlib.h>#include<string.h>//线性表的单链表存储结构typedefstructLNode{...
#include <stdio.h>#include <stdlib.h>#include <string.h>//线性表的单链表存储结构typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;int CreatList(LinkList p1,LinkList p2,LinkList head);//主函数 int main(){ LinkList p1,p2,head; printf("***"); CreatList(p1,p2,head);//创建一个单链表 return 0;}//创建单链表函数 int CreatList(LinkList p1,LinkList p2,LinkList head){ p2 =(struct LNode *)malloc(sizeof(LNode));//第一个结点(p2)开辟空间 if(p2==NULL) {printf("挂了");return 0;} head->next = p2;//头指针指向第一个结点 printf("请给第一个data赋值:"); scanf("%d",&p2->data); printf("\n");//第一个结点数据域赋值 //在第一个结点后往后添加结点 while(p2->data !=0) { p1 = p2;//两个指针指向第一个结点 p2 =(struct LNode *)malloc(sizeof(LNode));//p2重新开辟空间 printf("请给后面结点的data赋值:"); scanf("%d",&p2->data);//p2数据域赋值 printf("\n"); p1->next= p2;//将p1结点指向p2结点 } p2->next = NULL;//最后一个结点的标志(置空) return 0;}一运行就直接挂了,求解
展开
1个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
//链表定义
typedef int ElemType;
typedef struct LNode
{
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,int & e);
//插入函数
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(n<1)
{
printf("n must >=1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;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 (n<1)
{
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;i<n;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 (i<1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if (!p||j>i)
{
return false;
}
else
{
e=p->data;
return true;
}
}
}
//插入函数
void InsertLink(LinkList &L,int i,int e)
{
if (i<0||i>LengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&(j<i))
{
p=p->next;
j++;
}
if (!p||j>i)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
}
}
}
//删除函数
void DeleteLink(LinkList &L,int i,int &e)
{
if(i<=0||i>LengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{
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 (p1&&p2)
{
if (p1->data>=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);
}
#include<stdlib.h>
//链表定义
typedef int ElemType;
typedef struct LNode
{
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,int & e);
//插入函数
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(n<1)
{
printf("n must >=1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;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 (n<1)
{
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;i<n;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 (i<1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if (!p||j>i)
{
return false;
}
else
{
e=p->data;
return true;
}
}
}
//插入函数
void InsertLink(LinkList &L,int i,int e)
{
if (i<0||i>LengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&(j<i))
{
p=p->next;
j++;
}
if (!p||j>i)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
}
}
}
//删除函数
void DeleteLink(LinkList &L,int i,int &e)
{
if(i<=0||i>LengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{
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 (p1&&p2)
{
if (p1->data>=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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询