创建链表函数c语言 c语言创建链表每一步详解

c语言用函数创建单链表

#includestdio.h

我们提供的服务有:成都网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、源汇ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的源汇网站制作公司

#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语言编写一个链表?

可以用结构体和指针来实现

定义:

定义一个单个元素的结构

typedef struct Chain_tag { // 这里用typedef来定义,方便使用

int data; // 这里的数据可以是任意类型

//其他数据

struct Chain_tag *prev, *next;// 由于Chain为不完全类型,故只能用指针的方式声明

} Chain;

使用:

用单个结构体的指针作为head

#include malloc.h

//Chain的定义写在这里

Chain *

alloc_single_chain(int data /*, (其他参数)*/)

{

Chain *tmp;

tmp = malloc(sizeof(Chain));

tmp.data = data;

//...其余数据初始化

tmp.prev = tmp.next = NULL; // 将前后指针置为NULL

return tmp;

}

void

dispose_chain(Chain *target) //其实这里功能简单,用宏实现也可以

{

free(target);

return;

}

int main()

{

Chain *head;

Chain *pos;

head = alloc_single_chain(10);//初始化起始结点

head-next = alloc_single_chain(11);//同理。。下一个结点

for (pos = head; pos; pos = pos-next)//清理垃圾好习惯

{

dispose_chain(pos);

}

return 0;

}

这里有几点要注意:

由于链表用指针来实现,故不要忘记分配内存

垃圾清理时一定要从起始结点开始依次向后释放,以防内存泄漏

用c语言创建链表

主函数这里

Linklist List;

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

scanf("%d",num);

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

改为 

LNode List;

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

scanf("%d",num);

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

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

另外 你的变量名很迷人

c语言链表建立

#includestdio.h

#includestring.h

#includeconio.h

#includestdlib.h

typedef struct

{

char sno[10];

char name[10];

float score[3];

}Student;

typedef struct node

{

Student data;

struct node *next;

}LinkList;

Student s;

LinkList *head=NULL;

LinkList *last=NULL;

void Create(Student s)

{

LinkList *p;

p=(LinkList*)malloc(sizeof(LinkList));

p-data=s;

p-next=NULL;

if(head!=NULL)

{

last-next=p;

last=p;

}

else

{

head=p;

last=p;

}

}

void OutPut()

{

LinkList *p;

p=head;

while(p!=NULL)

{

printf("\n%5s%5s%5.1f%5.1f%5.1f",p-data.sno,p-data.name,p-data.score[0],p-data.score[1],p-data.score[2]);

p=p-next;

}

}

void Delete(LinkList *p) //*p 是要删除的节点

{

LinkList *q;

q=head;

while(q!=NULL q-next!=p)

q=q-next;

if(q==NULL)printf("\nNode not exist!");

else

{

printf("删除的节点是:");

printf("\n%5s%5s%5.1f%5.1f%5.1f",p-data.sno,p-data.name,p-data.score[0],p-data.score[1],p-data.score[2]);

q-next=p-next;

free(p);

}

}

void Append(Student s)

{

LinkList *p;

LinkList *q;

p=last; //尾插法

q=(LinkList*)malloc(sizeof(LinkList));

q-data=s;

q-next=p-next;

p-next=q;

}

void Save()

{

FILE *fp;

LinkList *p;

p=head;

// char filename="student.txt"

if(fp=fopen("filename","wb")==NULL)printf("\nfile open error");

while(p)

{

if(fwrite((p-data),sizeof(Student),1,fp)!=1)

printf("\nfile write error");

p=p-next;

}

fclose(fp);

}

LinkList * Query(Student s)

{

LinkList *q;

q=head;

while(q!=NULL)

{

if(strcmp(q-data.sno,s.sno)!=0)

q=q-next;

else break;

}

return q;

}

int main()

{

LinkList *p;

int ch;

do

{

system("cls");

printf("\n1.创建 2.添加 3.删除 4.查询 5.保存文件 6.输出 0.退出\n");

scanf("%d",ch);

switch(ch)

{

case 1:printf("\n请输入:学号,姓名,三门分数\n");

scanf("%s%s%f%f%f",s.sno,s.name,s.score[0],s.score[1],s.score[2]);

Create(s);break;

case 2:printf("\n请输入:学号,姓名,三门分数\n");

scanf("%s%s%f%f%f",s.sno,s.name,s.score[0],s.score[1],s.score[2]);

Append(s);break;

case 3:printf("\n请输入要删除的学号:"); //按学号删除;

scanf("%s",s.sno);

p=Query(s);

Delete(p);break;

case 4:printf("\n请输入要查询的学号:"); //按学号查询

scanf("%s",s.sno);

p=Query(s);

printf("\n%5s%5s%5.1f%5.1f%5.1f",p-data.sno,p-data.name,p-data.score[0],p-data.score[1],p-data.score[2]);

break;

case 5:Save();break;

case 6:OutPut();break;

case 0:exit(0);

}

printf("\npress any key return to menu...");

getch();

}while(1);

return 0;

}

.....


分享题目:创建链表函数c语言 c语言创建链表每一步详解
标题来源:http://scyanting.com/article/dosshgg.html