欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言創(chuàng)建節(jié)點的函數(shù) c++創(chuàng)建節(jié)點

C語言 在鏈表尾部添加節(jié)點

加分了

創(chuàng)新互聯(lián)公司是專業(yè)的遵義網(wǎng)站建設(shè)公司,遵義接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行遵義網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

#includestdio.h

#includestdlib.h

class point //節(jié)點類

{

public:

int a; //節(jié)點值

point *next; //next指針

};

void newlast(point *p,int i) //在*p所指的鏈表的最后新建一個值為i的節(jié)點

{

point *q,*o;

q=p;

while(q-next)

{

q=q-next;

}

printf("%d\n",q-a);

o=(point *)malloc(sizeof(point));

o-a=i;

q-next=o;

o-next=NULL; //結(jié)束標(biāo)記

}

void show(point *p) //輸出指針p所指鏈表

{

point *q;

q=p;

while(q)

{

printf("%d\t",q-a);

q=q-next;

}

printf("\n");

}

int main()

{

point b1,b2,b3;

point *p;

b1.a=1;

b2.a=2;

b3.a=3;

p=b1;

b1.next=b2;

b2.next=b3;

b3.next=NULL; //結(jié)束標(biāo)記

show(p);

newlast(p,4);

show(p);

return 0;

}

C語言編寫插入節(jié)點的函數(shù)(懸賞100分)

這個程序有兩個主要問題

1. void insert(list*pHead,list*pNode)因為是按值傳遞的 pHead值,所以不能改變pHead的值,改為按地址傳遞,list** pHead

2. insert()中,第一,二種情況時,沒有組成循環(huán)鏈表的閉環(huán)(沒有更新尾節(jié)點的next為新的head)。修改后的程序如下:

#includestdio.h //預(yù)編譯命令

struct list//定義結(jié)構(gòu)體

{

int num;

list* next;

};

list *head,*end; //定義全局變量

list* creat()//創(chuàng)建鏈表的函數(shù)

{

list* p=NULL;

list* q=NULL;

head=NULL;

int num;

scanf("%d",num);

while(num!=0)

{

p=new list; //開辟空間

p-num=num;

if(head==NULL)

head=p;

else

q-next=p;

q=p;

scanf("%d",num);

}

end=q; //將鏈表的結(jié)尾最后一個結(jié)點賦給end

end-next=head; //讓最后一個結(jié)點的的下個結(jié)點的地址不為空而指向頭指針

return(head);

}

void insert( list** pHead,list* pNode) //插入接點的函數(shù),

{

list *q,*r;

//第一種情況,鏈表為空

if(*pHead==NULL)

{

*pHead=pNode; //鏈表頭指向pNode

(*pHead)-next = *pHead;//為了循環(huán)用

return; //完成插入操作,返回

}

//第二種情況,pNode結(jié)點num的值小于dengyu鏈表頭結(jié)點num的值

//則將pNode的值插到鏈表頭部

if(pNode-num=(*pHead)-num)

{

//這是為了更新最后一個端點與頭節(jié)點的連接

list* pos = *pHead;

while (pos-next != *pHead)

{

pos = pos-next;

}

pos-next = pNode;

pNode-next= (*pHead);

*pHead=pNode;

return;

}

//第三種情況,循環(huán)查找正確位置

r=*pHead;

q=(*pHead)-next;

while(q!=*pHead)

{

if(pNode-numq-num)

{

r=q;

q=q-next;

}

else

break;

}

//如果插入到最后的位置,則更新pEnd的值

r-next=pNode;

pNode-next=q;

}

list* together(list* p1,list* p2) //定義兩個鏈表合并的函數(shù)

{

list *q,*r;

q=p2;

do

{

r=new list; //開辟空間

r-num=q-num; //將q的值賦給r

insert(p1,r); //調(diào)用插入結(jié)點的函數(shù)

q=q-next; //指針向后撥一個接點

}while(q!=p2); //當(dāng)在最后一個結(jié)點時停止循環(huán)

return(p1); //返回頭指針

}

void main() //主函數(shù)

{

list *list1,*list2,*r,*q;

list1=creat(); //調(diào)用創(chuàng)建鏈表的函數(shù)

list2=creat(); //調(diào)用創(chuàng)建鏈表的函數(shù)

r=together(list1,list2); //調(diào)用合并兩個鏈表的函數(shù)

q=r-next;

for(;q!=r;q=q-next)

printf("%d ",q-num);

}

C語言,為什么為什么新建節(jié)點的函數(shù)一定要返回頭指針?

struct?link?*AppendNode(struct?link?*head)?{//這里默認(rèn)head為鏈表的頭結(jié)點

int?a;

struct?link?*p?=?NULL,*pr?=?head;

p?=?(struct?link*)malloc(sizeof(struct?link));?//p指向新建節(jié)點

if(head?==?NULL)?head?=?p;//因為head?==?NULL,所以表是空的,故頭結(jié)點head指向新結(jié)點

else?{

while(pr-next?!=?NULL)?{//前進(jìn)到鏈表的尾節(jié)點

pr?=?pr-next;

}

pr-next?=?p;//新結(jié)點鏈到鏈表的尾部

}

printf("input?data:");

scanf("%d",a);

p-data?=?a;

p-next?=?NULL;

return?head;

}

c語言鏈表插入一個新節(jié)點的函數(shù)問題

首先,主函數(shù)中,“請輸入插入的數(shù)據(jù)”那里scanf應(yīng)該是b,這是引發(fā)崩潰的原因。

其次,insert函數(shù)的目的應(yīng)該是想插入數(shù)據(jù)后仍是有序鏈表。但你的insert函數(shù)邏輯太亂,有些不必要的判斷,我修正了你的代碼,貼給你看看。(雖然你insert是想保證有序,但你在創(chuàng)建的時候沒有保證有序,所以最終結(jié)果不一定是有序。例如,創(chuàng)建 1,5,2,插入3,最后輸出的是 1,3,5,2)

代碼修改:

scanf("%d", b);

重寫了insert函數(shù),簡化邏輯;

動態(tài)分配的內(nèi)存記得釋放,增加freeNode釋放空間

#include?stdio.h

#include?stdlib.h

struct?link

{

int?data;

struct?link?*next;

};

struct?link?*add(struct?link?*head);//創(chuàng)建鏈表?

void?display(struct?link?*head);//輸出數(shù)據(jù)?

struct?link?*insert(struct?link?*head,?int?b);?//插入新節(jié)點?

void?freeNode(struct?link?*); //釋放空間

int?main()

{

char?c;

struct?link?*head?=?NULL;

printf("要創(chuàng)建一個鏈表嗎?");

scanf("?%c",?c);

while?(c?==?'y'?||?c?==?'Y')

{

head?=?add(head);

printf("要繼續(xù)創(chuàng)建節(jié)點嗎?");

scanf("?%c",?c);

}

display(head);

int?b;

printf("輸入插入的數(shù)據(jù)");

scanf("%d",?b);

head?=?insert(head,?b);

display(head);

freeNode(head);

}

struct?link?*add(struct?link?*head)

{

int?data;

struct?link?*p?=?(struct?link*)malloc(sizeof(struct?link));

if?(head?==?NULL)

{

head?=?p;

}

else

{

struct?link?*pr?=?head;//一個臨時指針pr先保存下head的地址?

while?(pr-next?!=?NULL)

{

pr?=?pr-next;

}

pr-next?=?p;

}

printf("輸入數(shù)據(jù)");

scanf("%d",?p-data);

p-next?=?NULL;

return?head;

}

void?display(struct?link?*head)

{

struct?link?*pr?=?head;

while?(pr?!=?NULL)

{

printf("%d\n",?pr-data);

pr?=?pr-next;

}

}

struct?link?*insert(struct?link?*head,?int?b)

{

struct?link?*ptr?=?head,?*prev?=?head;

struct?link?*newNode?=?(struct?link?*)malloc(sizeof(struct?link));

newNode-data?=?b;

while?(ptr??b??ptr-data)?{

prev?=?ptr;

ptr?=?ptr-next;

}

newNode-next?=?ptr;

if?(ptr?==?head) head?=?newNode;

else prev-next?=?newNode;

return?head;

}

void?freeNode(struct?link?*node)?{

if?(!node) return;

freeNode(node-next);

free(node);

}

網(wǎng)頁名稱:c語言創(chuàng)建節(jié)點的函數(shù) c++創(chuàng)建節(jié)點
文章源于:http://chinadenli.net/article4/ddodpie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站全網(wǎng)營銷推廣標(biāo)簽優(yōu)化做網(wǎng)站網(wǎng)頁設(shè)計公司

廣告

聲明:本網(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)

綿陽服務(wù)器托管