创建链表c语言使用函数,C语言链表建立

C语言如何创建单链表?

C语言创建单链表如下:

成都创新互联专注于绩溪网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供绩溪营销型网站建设,绩溪网站制作、绩溪网页设计、绩溪网站官网定制、微信小程序定制开发服务,打造绩溪网络公司原创品牌,更为您提供绩溪网站排名全网营销落地服务。

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

int  data;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L-next=NULL;

printf("请输入第1个数据:");

scanf("%d",c);

L-data=c;

for(int i=2;i=n;i++)

{

s=(List)malloc(sizeof(node));

printf("请输入第%d个数据:",i);

scanf("%d",c);

s-data=c;

s-next=L;

L-next =s;

}

printf("链表创建成功!");

}

void main()

{

int n;

printf("请你输入链表的个数:");

scanf("%d",n);

create(n);

}

单链表创建方法:

单链表的建立有头插法、尾插法两种方法。

1. 头插法

单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。

由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请 存储空间可使用malloc()函数实现,需设立一申请单元 指针,但malloc()函数得到的指针并不是指向 结构体的指针,需使用 强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head 指针为NULL。

链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。

2. 尾插法

若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是 头结点。

c语言用函数创建单链表

#includestdio.h

#includestdlib.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(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=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=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语言创建链表?

#includestdio.h

#includestdlib.h

typedef struct data { int number; struct data *next; } DATA;

int main() { int n; DATA *head,*p;

printf("how many?\n"); scanf("%d",n); head=create(n); printf("there is all\n");

while ( head!=NULL ) { printf("%d ",head-number); head=head-next; } printf("\n");

while ( head!=NULL ) { p=head; head=head-next; free(p); }

return 0;

}

DATA *create(int n) { DATA *head=NULL,*t=NULL,*tial=NULL; int i;

printf("let's create it\n"); head=(DATA*)malloc(sizeof(DATA));

if ( !head ) { printf("error"); return NULL; }

head-next=NULL; printf("enter your data\n");  scanf("%d",head-number);

for ( i=1,tial=head;in;i++ ) {

t=(DATA*)malloc(sizeof(DATA)); if ( !t ) { printf("error"); return head; }

scanf("%d",t-number); t-next=NULL; tial-next=t; tial=t;

}

return head;

}

用c语言创建链表

主函数这里

Linklist List;

printf("输入创建链表的长度:");

scanf("%d",num);

CreateList_H(List,num); //创建链表

改为 

LNode List;

printf("输入创建链表的长度:");

scanf("%d",num);

CreateList_H(List,num); //创建链表

函数内在堆上分配好内存,但是 没有传递到栈上

另外 你的变量名很迷人

C语言创建链表,函数调用部分

#includestdio.h

#includewindows.h

#include stdio.h

#include malloc.h

#include stdlib.h

//定义数据类型名称

typedef int DataType;

#define flag -1        //定义数据输入结束的标志数据

//单链表结点存储结构定义

typedef struct Node

{

DataType data;

struct Node *next;

}LNode ,*LinkList;

//建立单链表子函数

LNode *Create_LinkList()

{

LNode *s,*head,*L;int i=0,x;        //定义指向当前插入元素的指针

while(1)

{

scanf("%d",x);

if(-1==x)

{   return head;

break;}

s= (LNode *)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =NULL;

i++;

if(i==1)

head=s;

else

L-next =s;

L=s;

}

}

//查找子函数(按序号查找)

LNode *Get_LinkList(LinkList L,int i)

{

LNode *p;

int j;        //j是计数器,用来判断当前的结点是否是第i个结点

p=L;

j=1;

while(p!=NULLji)

{

p=p-next ;        //当前结点p不是第i个且p非空,则p移向下一个结点

j++;

}

return p;

}

//插入运算子函数

void Insert_LinkList(LinkList L,int i,DataType x)        //在单链表L中第i个位置插入值为x的新结点

{

LNode *p,*s;

p =Get_LinkList(L,i);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("插入位置不合法!");

exit(-1);

}

else

{

s= (LinkList)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =p-next ;

p-next =s;

}

}

//单链表的删除运算子函数

void Delete_LinkList(LinkList L,int i)        //删除单链表上的第i个结点

{

LNode *p,*q;

p=Get_LinkList(L,i-1);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("删除的位置不合法!");        //第i个结点的前驱结点不存在,不能执行删除操作

exit(-1);

}

else

{

if(p-next ==NULL)

{

 printf("删除的位置不合法!");        //第i个结点不存在,不能执行删除操作

 exit(-1);

}

else

{

 q=p-next ;

 p-next =p-next-next;

 free(q);

}

}

}

//求表长运算子函数

int Length_LinkList(LinkList L)

{

int l;        //l记录L的表长

LNode *p;

p=L;

l=1;

while(p-next)

{

p=p-next;

l++;

}

return l;

}

int main ()

{

LNode *head,*p;

head=(LinkList)malloc(sizeof(LNode));

int x,y;

a:

printf("*******menu*******\n");

printf("**创建**********1*\n");

printf("**插入**********2*\n");

printf("**删除**********3*\n");

printf("**表长**********4*\n");

printf("**清屏**********5*\n");

printf("**打印**********6*\n");

printf("**退出******other*\n");

printf("******************\n");

int i=1;

while(i)

{

printf("请输入选项:");

scanf("%d",i);

switch(i)

{

case 1:head=Create_LinkList(); getchar();break;

case 2:printf("请输入位置和数据;");

scanf("%d%d",x,y);

Insert_LinkList(head,x,y);break;

case 3:printf("请输入位置;");

scanf("%d",x);

Delete_LinkList(head,x);break;

case 4:printf("%d",Length_LinkList(head));break;

case 5:system("cls");goto a;

case 6:p=head;

while(p!=NULL)

{printf("%d\n",p-data);

p=p-next;}

break;

default :i=0;

}

}

}

我把创建给改了一下

C语言链表的使用方法

下面的程序是单链表的建立与输出,都有详细的注释,相信你能看的懂

但要想学习链表必须得掌握了一定的C语言基础

下面这个链表的作用是建立5个结点的单链表,5个结点的值输入以后,依次输出各个结点的值

#includestdio.h

#includestdlib.h

//链表的建立与输出

struct node//定义结点的类型

{

int num,score;

node*link;

};

void main()

{

node*creat(int n);//函数原型声明

void print(node*h);//函数原型声明

node*head=0;//定义链头指针并初始化

head=creat(5);//调用creat函数创建链表

print(head);//调用print函数输出链表

}

node*creat(int n)

{

node*h=0,*p,*q;

int i;

for(i=1;i=n;i++)

{

q=(node*)malloc(sizeof(node));//分配一个结点空间

scanf("%d%d",q-num,q-score);//输入新结点的值

q-link=0;//新结点的指针域置0

if(h==0)

h=q;//第一个结点作为链头结点

else

p-link=q;//新结点添加到链表的末尾

p=q;

}

return h;//返回链头指针

}

void print(node*h)//链表输出函数的定义

{

while(h)//当指针h非空时输出h所指结点的值

{

printf("num=%d\tscore=%d\n",h-num,h-score);

h=h-link;//使h指向下一个结点

}

}


文章名称:创建链表c语言使用函数,C语言链表建立
本文地址:http://cdiso.cn/article/dsceceo.html

其他资讯