其實這是一個與C語言參數(shù)傳值的問題,C語言規(guī)定實參變量對形參變量的參數(shù)傳遞是值傳遞,在執(zhí)行函數(shù)調(diào)用時形參變量值的改變,并不影響主調(diào)函數(shù)的實參變量。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計制作、成都網(wǎng)站制作與策劃設(shè)計,安溪網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:安溪等地區(qū)。安溪做網(wǎng)站價格咨詢:18982081108
如:int x,y;
void fun(int a, int b)
{
b=b+a;
}
void main()
{ x=1; y=2;
fun(x, y);
.....
//此時仍然x=1; y=2;
}
但是,函數(shù)寫成如下形式
void InitList(LinkList *head);可以實現(xiàn)引用傳遞參數(shù)的功能。
在需要函數(shù)內(nèi)部修改鏈表頭指針時,用該形式可以解決該問題。
而void InitList(LinkList head) 不可以在函數(shù)內(nèi)部修改鏈表頭指針。
#includestdio.h
#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);
//鏈表長度函數(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;
}
}
//鏈表長度函數(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);
}
你說的那個是逆序建立n個節(jié)點的鏈表,建完頭結(jié)點后由于鏈表中沒有其他節(jié)點就把頭結(jié)點的next置為空,這一點如果不明白的話去看鏈表那一章,有介紹!!!
之后從后往前建立鏈表!!剛開始是L-next?=NULL
要注意p是每次新建的節(jié)點,這樣從后往前以此建立鏈表,只要明白p是每次新建的節(jié)點,和從后往前建立,就會明白的!!給你花了張圖!!
在單
鏈表
A中刪除所有和
單鏈表
B中元素相同的結(jié)點
#include
"stdafx.h"
#include
stdio.h
#include
malloc.h
#define
SIZE
sizeof(struct
node)
struct
node{
int
data;
struct
node
*next;
};
void
init(struct
node
*LC){
int
n;
struct
node
*Str,*p;
p=(struct
node
*)malloc(SIZE);
Str=LC;
printf("請輸入鏈表A,以小于零的數(shù)結(jié)束輸入:\n");
scanf("%d",n);
while(n=0){
p-data=n;
Str-next=p;
Str=p;
p=(struct
node
*)malloc(SIZE);
scanf("%d",n);
Str-next=NULL;
}
printf("您輸入的序列的是:\n");
for
(Str=LC-next;Str!=NULL;){
printf("%d
",Str-data);
Str=Str-next;
}
printf("\n");
}
void
delet_LA(struct
node
*LA,struct
node
*pa){
struct
node
*p;
struct
node
*q;
p=LA;
q=p;
for
(p;p!=pa;){
q=p;
p=p-next;
}
q-next=pa-next;
}
void
delete_same(struct
node
*LA,struct
node
*LB){
struct
node
*pa,*pb;
pa=LA-next;
pb=LB-next;
for
(pb;pb!=NULL;){
for
(pa;pa!=NULL;){
if
(pb-data==pa-data){
delet_LA(LA,pa);
pa=LA-next;
}
else{
pa=pa-next;
}
}
pb=pb-next;
pa=LA-next;
}
printf("處理后的單鏈表A為:\n");
for
(pa=LA-next;pa!=NULL;){
printf("%d
",pa-data);
pa=pa-next;
}
}
void
main(){
struct
node
*LA;
struct
node
*LB;
LA=(struct
node
*)malloc(SIZE);
if(LA!=NULL)
LA-data=-1;
LB=(struct
node
*)malloc(SIZE);
if(LB!=NULL)
LB-data=-1;
init(LA);
init(LB);
delete_same(LA,LB);
}
當(dāng)前標(biāo)題:單鏈表的初始化函數(shù)c語言,C語言單鏈表定義
轉(zhuǎn)載來源:http://chinadenli.net/article36/hescpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、建站公司、服務(wù)器托管、全網(wǎng)營銷推廣、網(wǎng)站建設(shè)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)