c語言怎么用函數(shù)創(chuàng)建鏈表 c語言建立鏈表函數(shù)

c語言用函數(shù)創(chuàng)建單鏈表

#includestdio.h

創(chuàng)新互聯(lián)建站10多年企業(yè)網(wǎng)站設(shè)計(jì)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站設(shè)計(jì)及推廣,對(duì)樓梯護(hù)欄等多個(gè)方面擁有豐富的網(wǎng)站推廣經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

#includestdlib.h

//鏈表定義

typedef int ElemType;

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

/*************************************

* 鏈表函數(shù) *

*************************************/

//鏈表初始化

void InitLink(LinkList L);

//創(chuàng)建函數(shù),尾插法

void CreateLink_T(LinkList L,int n);

//創(chuàng)建函數(shù),頭插法

void CreateLink_H(LinkList L,int n);

//銷毀函數(shù)

void DestroyLink(LinkList L);

//判斷是否為空函數(shù)

bool EmptyLink(LinkList L);

//獲取函數(shù)

bool GetLink(LinkList L,int i,int e);

//插入函數(shù)

void InsertLink(LinkList L,int i,int e);

//刪除函數(shù)

void DeleteLink(LinkList L,int i,int e);

//遍歷函數(shù)

void TraverseLink(LinkList L);

//鏈表長(zhǎng)度函數(shù)

int LengthLink(LinkList L);

//合并函數(shù)

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);

}

//創(chuàng)建函數(shù),尾插法

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;

}

}

}

//創(chuàng)建函數(shù),頭插法

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;

}

}

//銷毀函數(shù)

void DestroyLink(LinkList L)

{

LinkList q=L,p=L;

while (p)

{

q=p;

p=p-next;

free(q);

}

L-next=NULL;

}

//判斷是否為空函數(shù)

bool EmptyLink(LinkList L)

{

if (NULL==L-next)

{

return true;

}

else

{

return false;

}

}

//獲取函數(shù)

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;

}

}

}

//插入函數(shù)

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;

}

}

}

//刪除函數(shù)

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);

}

}

}

//遍歷函數(shù)

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;

}

}

//鏈表長(zhǎng)度函數(shù)

int LengthLink(LinkList L)

{

int i=0;

LinkList p=L-next;

while(p)

{

p=p-next;

i++;

}

return i;

}

//合并函數(shù)

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語言創(chuàng)建一個(gè)鏈表,實(shí)現(xiàn)增、刪、改、查?

#include\x0d\x0a#include\x0d\x0a#include \x0d\x0a//先定義一種student類型,表示一個(gè)學(xué)生的信息,如下:\x0d\x0atypedef struct student\x0d\x0a{\x0d\x0aint num; //表示學(xué)號(hào)\x0d\x0achar name[30]; //表示姓名\x0d\x0afloat score; //表示分?jǐn)?shù)\x0d\x0a}student;\x0d\x0a//定義一種NODE類型,表示一個(gè)結(jié)點(diǎn)信息,如下:\x0d\x0atypedef struct node\x0d\x0a{\x0d\x0astudent st; //表示一個(gè)學(xué)生的信息\x0d\x0astruct node *next; //表示一個(gè)NODE類型的指針\x0d\x0a}NODE;\x0d\x0a//1、寫出建立一個(gè)帶頭結(jié)點(diǎn)的線性鏈表的函數(shù),其中每個(gè)結(jié)點(diǎn)包括學(xué)號(hào)、姓名、分?jǐn)?shù)三個(gè)數(shù)據(jù)域。函數(shù)形式如下:\x0d\x0aNODE *creat_link(int direction)\x0d\x0a{\x0d\x0aNODE *head,*p,*tail;\x0d\x0aint xh,i=1;\x0d\x0aif(direction==1) //當(dāng)direction的值為1時(shí),新建立的結(jié)點(diǎn)連到尾部\x0d\x0a{\x0d\x0atail=head=(NODE *)malloc(sizeof(NODE));\x0d\x0ahead-next=NULL;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):",i);\x0d\x0ascanf("%d",xh);\x0d\x0awhile(xh0) //從鍵盤臨時(shí)輸入學(xué)生情況,當(dāng)輸入的學(xué)號(hào)非正,則鏈表建立完畢\x0d\x0a{\x0d\x0ap=(NODE *)malloc(sizeof(NODE));\x0d\x0ap-st.num=xh;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的姓名:",i);\x0d\x0ascanf("%s",p-st.name);\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的成績(jī):",i);\x0d\x0ascanf("%f",p-st.score);\x0d\x0ap-next=NULL;\x0d\x0atail-next=p;\x0d\x0atail=p;\x0d\x0ai=i+1;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):",i);\x0d\x0ascanf("%d",xh);\x0d\x0a}\x0d\x0a}\x0d\x0aelse if(direction==0) //當(dāng)direction為0時(shí),新建立的結(jié)點(diǎn)成為第一個(gè)結(jié)點(diǎn)\x0d\x0a{\x0d\x0ahead=(NODE *)malloc(sizeof(NODE));\x0d\x0ahead-next=NULL;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):",i);\x0d\x0ascanf("%d",xh);\x0d\x0awhile(xh0) //從鍵盤臨時(shí)輸入學(xué)生情況,當(dāng)輸入的學(xué)號(hào)非正,則鏈表建立完畢\x0d\x0a{\x0d\x0ap=(NODE *)malloc(sizeof(NODE));\x0d\x0ap-st.num=xh;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的姓名:",i);\x0d\x0ascanf("%s",p-st.name);\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的成績(jī):",i);\x0d\x0ascanf("%f",p-st.score);\x0d\x0ap-next=head-next;\x0d\x0ahead-next=p;\x0d\x0ai=i+1;\x0d\x0aprintf("請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):",i);\x0d\x0ascanf("%d",xh);\x0d\x0a}\x0d\x0a}\x0d\x0areturn head;\x0d\x0a}\x0d\x0a//2、寫出輸出上述鏈表各結(jié)點(diǎn)數(shù)據(jù)域值的函數(shù)。該函數(shù)對(duì)應(yīng)的函數(shù)需要一個(gè)形參,表示鏈表的頭指針,形式如下:\x0d\x0avoid print_link(NODE *head)\x0d\x0a{\x0d\x0aNODE *p;\x0d\x0ap=head-next;\x0d\x0aprintf("%-10s%-20s%-10s\n","學(xué)號(hào)","姓名","分?jǐn)?shù)");\x0d\x0awhile(p!=NULL)\x0d\x0a{\x0d\x0aprintf("%-10d%-20s%-10.1f\n",p-st.num,p-st.name,p-st.score);\x0d\x0ap=p-next;\x0d\x0a}\x0d\x0a//該函數(shù)能輸出head所指的鏈表的所有結(jié)點(diǎn)值,輸出形式如下:\x0d\x0a/*本函數(shù)輸出線性表sq中所有數(shù)據(jù),形式如下:\x0d\x0a學(xué)號(hào) 姓名 分?jǐn)?shù)\x0d\x0a12 張三 234.5\x0d\x0a18 李四 987.7\x0d\x0a??? ??? ??.*/\x0d\x0a}\x0d\x0a//3、寫出在鏈表中刪除結(jié)點(diǎn)的函數(shù)\x0d\x0aint del_link(NODE *head,char name[])\x0d\x0a{\x0d\x0aNODE *p,*p1;\x0d\x0ap=head-next;\x0d\x0ap1=head;\x0d\x0awhile(p!=NULL)\x0d\x0a{\x0d\x0aif(strcmp(p-st.name,name)!=0)\x0d\x0a{\x0d\x0ap1=p;\x0d\x0ap=p-next;\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0abreak;\x0d\x0a}\x0d\x0a}\x0d\x0aif(p!=NULL)\x0d\x0a{\x0d\x0ap1-next=p-next;\x0d\x0afree(p);\x0d\x0areturn 1;\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0areturn 0;\x0d\x0a}\x0d\x0a//刪除head所指的鏈表中,名字為name的結(jié)點(diǎn),刪除成功返回1,不成功返回0\x0d\x0a}\x0d\x0a//4、寫出在鏈表中插入結(jié)點(diǎn)的算法\x0d\x0aint insert(NODE *head,student x,int wz)\x0d\x0a{\x0d\x0aNODE *p=head;\x0d\x0aint i=0,jg;\x0d\x0aif(wznext;\x0d\x0a}\x0d\x0aif(p==NULL)\x0d\x0a{\x0d\x0ajg=0;\x0d\x0a}\x0d\x0aif(i=wz-1)\x0d\x0a{\x0d\x0a//找到wz前面的節(jié)點(diǎn),p指向它\x0d\x0aNODE *q;\x0d\x0aq=(NODE *)malloc(sizeof(NODE));\x0d\x0aq-st.num=x.num;\x0d\x0astrcpy(q-st.name,x.name);\x0d\x0aq-st.score=x.score;\x0d\x0aq-next=p-next;\x0d\x0ap-next=q;\x0d\x0ajg=1;\x0d\x0a}\x0d\x0a}\x0d\x0areturn jg;\x0d\x0a//該函數(shù)能夠在wz這個(gè)結(jié)點(diǎn)之前,插入一個(gè)新結(jié)點(diǎn),新結(jié)點(diǎn)的數(shù)據(jù)域?yàn)閤。插入成功返回1,不成功返回0。\x0d\x0a}\x0d\x0a//5、寫出主函數(shù),分別調(diào)用上面算法所對(duì)應(yīng)的程序,建立鏈表,并輸出鏈表的值。\x0d\x0avoid main()\x0d\x0a{\x0d\x0aNODE *head; //定義指針變量head\x0d\x0aint wz; //表示插入位置\x0d\x0achar xm[30];\x0d\x0astudent st; //定義一個(gè)變量st,用來表示一個(gè)學(xué)生的信息\x0d\x0ahead=creat_link(1);\x0d\x0aprint_link(head); //調(diào)用函數(shù)建立鏈表,并把返回值送給head;\x0d\x0a//調(diào)用函數(shù),輸出鏈表中各個(gè)結(jié)點(diǎn)的值\x0d\x0a//輸入一個(gè)學(xué)生的有關(guān)信息,送給變量st的有關(guān)成員\x0d\x0aprintf("\n\n請(qǐng)輸入要插入的位置:");\x0d\x0ascanf("%d",wz); //輸入wz的值\x0d\x0aprintf("請(qǐng)輸入要插入的學(xué)生的學(xué)號(hào):");\x0d\x0ascanf("%d",st.num);\x0d\x0aprintf("請(qǐng)輸入要插入的學(xué)生的姓名:");\x0d\x0ascanf("%s",st.name);\x0d\x0aprintf("請(qǐng)輸入要插入的學(xué)生的成績(jī):");\x0d\x0ascanf("%f",st.score); \x0d\x0a//調(diào)用函數(shù),在鏈表中把學(xué)生st的值作為一個(gè)結(jié)點(diǎn)插入,如果插入成功,輸出新鏈表\x0d\x0aif(insert(head,st,wz)==1)\x0d\x0a{\x0d\x0aprintf("\n插入成功,新表為:\n");\x0d\x0aprint_link(head);\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0aprintf("插入不成功");\x0d\x0a}\x0d\x0a//調(diào)用函數(shù),在鏈表中刪除一個(gè)指定結(jié)點(diǎn)的值,如果刪除成功,輸出新鏈表\x0d\x0aprintf("\n\n請(qǐng)輸入要?jiǎng)h除的學(xué)生的姓名:");\x0d\x0agetchar();\x0d\x0agets(xm);\x0d\x0aif(del_link(head,xm)==1)\x0d\x0a{\x0d\x0aprintf("\n刪除成功,新表為:\n");\x0d\x0aprint_link(head);\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0aprintf("刪除不成功");\x0d\x0a}\x0d\x0a}

用c語言創(chuàng)建鏈表

主函數(shù)這里

Linklist?List;

printf("輸入創(chuàng)建鏈表的長(zhǎng)度:");

scanf("%d",num);

CreateList_H(List,num); //創(chuàng)建鏈表

改為?

LNode?List;

printf("輸入創(chuàng)建鏈表的長(zhǎng)度:");

scanf("%d",num);

CreateList_H(List,num); //創(chuàng)建鏈表

函數(shù)內(nèi)在堆上分配好內(nèi)存,但是 沒有傳遞到棧上

另外?你的變量名很迷人

c語言創(chuàng)建鏈表?

#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;

}

網(wǎng)站標(biāo)題:c語言怎么用函數(shù)創(chuàng)建鏈表 c語言建立鏈表函數(shù)
文章起源:http://muchs.cn/article10/dospcdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航響應(yīng)式網(wǎng)站、微信小程序外貿(mào)網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)