中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

c語言單鏈表插入函數(shù) C語言建立單鏈表

C語言 單鏈表插入的代碼是?

在給定的單鏈表的第i位上插入值為n的節(jié)點。

創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡公司、廣告設計公司的優(yōu)秀設計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設計師、平面廣告設計師、網(wǎng)絡營銷人員及形象策劃。承接:成都網(wǎng)站建設、做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁設計制作、網(wǎng)站建設與維護、網(wǎng)絡推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務。

#include stdio.h

#includemalloc.h

#define N 5

typedef int elemtype;

typedef struct node

{

elemtype data;

struct node *next;

}linklist;

linklist *Creatlist(linklist*L){

L=(linklist*)malloc(sizeof(linklist));

L-next=NULL;

return L;

}

int Judge(linklist *L){

if(L-next==NULL)

{

printf("建表成功...\n");

}

else

printf("建表失敗.\n");

return 0;

}

int Input(linklist *L,int x,linklist *r){

int i;

linklist *p;

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

p-data=x;

p-next=NULL;

r-next=p;

printf("%d ",p-data);

return 0;

}

int Insert1(linklist *L,int i){

linklist *p,*q,*r,*t;

int j=1,item;

p=L-next;

q=L;

r=L;

if(L-next==NULL)

{

printf("表空.\n");

return 0;

}

else

{

while(p!=NULLji)

{

q=p;

p=p-next;

j++;

}

if(p==NULL)

{

printf("%d不在表的范圍內(nèi).\n");

return 0;

}

else

{

t=(linklist*)malloc(sizeof(linklist));

t-next=NULL;

printf("請輸入item:");

scanf("%d",item);

t-data=item;

t-next=p;

q-next=t;

}

printf("在第%d位上插入值為%d的節(jié)點后的所有數(shù)據(jù)為\n",i,item);

for(j=0;jN+1;j++)

{

r=r-next;

printf("%d ",r-data);

}

printf("\n");

return 1;

}

}

int main()

{

int i,item,k;

linklist *L,*r;

printf("單向鏈表的創(chuàng)建(包括初始化)與輸出\n");

L=Creatlist(L);

Judge(L);

printf("表中的數(shù)據(jù)為:");

r=L;

Input(L,11,r);

r=r-next;

Input(L,32,r);

r=r-next;

Input(L,17,r);

r=r-next;

Input(L,46,r);

r=r-next;

Input(L,9,r);

r=r-next;

printf("\n");

printf("在給定的單鏈表的第i位上插入值為item的節(jié)點\n");

printf("請輸入i:");

scanf("%d",i);

Insert1(L,i);

return 0;

}

在給定單鏈表的值為m的節(jié)點的前面插入一個值為n的節(jié)點

#include stdio.h

#includemalloc.h

#define N 5

typedef int elemtype;

typedef struct node

{

elemtype data;

struct node *next;

}linklist;

linklist *Creatlist(linklist*L){

L=(linklist*)malloc(sizeof(linklist));

L-next=NULL;

return L;

}

int Judge(linklist *L){

if(L-next==NULL)

{

printf("建表成功...\n");

}

else

printf("建表失敗.\n");

return 0;

}

int Input(linklist *L,int x,linklist *r){

int i;

linklist *p;

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

p-data=x;

p-next=NULL;

r-next=p;

printf("%d ",p-data);

return 0;

}

int Insert2(linklist *L,int item){

linklist *p,*q,*r,*t;

int j=1,m;

p=L-next;

r=L;

q=L;

if(L-next==NULL)

{

printf("表空.\n");

return 0;

}

else

{

while(p!=NULL)

{

if(p-data!=item)

{

q=p;

p=p-next;

}

else

break;

}

if(p==NULL)

{

printf("%d不在表的范圍內(nèi).\n");

return 0;

}

else

{

t=(linklist *)malloc(sizeof(linklist));

t-next=NULL;

printf("請輸入m:");

scanf("%d",m);

t-data=m;

q-next=t;

t-next=p;

}

}

printf("在值為%d的節(jié)點的前面插入一個值為%d的節(jié)點后的所有數(shù)據(jù)為\n",item,m);

for(j=0;jN+1;j++)

{

r=r-next;

printf("%d ",r-data);

}

printf("\n");

return 1;

}

int main()

{

int i,item,k;

linklist *L,*r;

printf("單向鏈表的創(chuàng)建(包括初始化)與輸出\n");

L=Creatlist(L);

Judge(L);

printf("表中的數(shù)據(jù)為:");

r=L;

Input(L,11,r);

r=r-next;

Input(L,32,r);

r=r-next;

Input(L,17,r);

r=r-next;

Input(L,46,r);

r=r-next;

Input(L,9,r);

r=r-next;

printf("\n");

printf("在給定單鏈表的值為item的節(jié)點的前面插入一個值為m的節(jié)點\n");

printf("請輸入item:");

scanf("%d",item);

Insert2(L,item);

return 0;

}

C語言 單鏈表的插入刪除操作

學到指針,也要開始學習C語言的調(diào)試技能了,發(fā)現(xiàn)問題,最好自己調(diào)試解決。

如果編程軟件支持斷點,單步調(diào)試等功能那就最好了,如果不支持,也可以使用printf()語句打印相關(guān)的變量值來進行調(diào)試。

主要問題出在scan()函數(shù)

scan(struct linklist1 *a,struct linklist2 *b,struct linklist1 **p,struct linklist2 **q)

{

struct linklist1 *m;

int i=0,u=0;

m=a-next;

while(a-next!=0)

{a=a-next;

i++;

if(a-xhm-xh)/*當只剩下一個記錄時,u=0*/

{m=a;

u=i;

}

}

*p=m;

for(i=0;iu;i++) /* u=0時,這個循環(huán)不會執(zhí)行 */

b=b-next;

*q=b; /* u=0時,這里就出錯了 */

}

修改后的代碼,有簡單的調(diào)試信息輸出

#include "stdio.h"

struct linklist1

{

int xh;

struct linklist1 *next;

};

struct linklist2

{

int grade;

struct linklist2 *next;

};

struct conlink

{

int xh;

int grade;

struct conlink *next;

};

struct linklist1 *creat1()

/**創(chuàng)建單鏈表a**/

{

int i;

struct linklist1 *head,*p,*q;

head=(struct linklist1 *)malloc(sizeof(struct linklist1));

p=q=head;

printf("please input 5 xh:\n");

for(i=0;i5;i++)

{p=(struct linklist1 *)malloc(sizeof(struct linklist1));

scanf("%d",(p-xh));

p-next=0;

q-next=p;

q=p;

}

return head;

}

struct linklist2 *creat2()

/**創(chuàng)建單鏈表b**/

{int i;

struct linklist2 *head,*p,*q;

head=(struct linklist2 *)malloc(sizeof(struct linklist2));

p=q=head;

printf("please input 5 grade:\n");

for(i=0;i5;i++)

{p=(struct linklist2 *)malloc(sizeof(struct linklist2));

scanf("%d",(p-grade));

p-next=0;

q-next=p;

q=p;

}

return head;

}

scann(struct linklist1 *a,struct linklist2 *b,struct linklist1 **p,struct linklist2

**q)

/**查找單鏈表中學號最大的結(jié)點,存入*p,對應的成績存入*q**/

{

struct linklist1 *m = a-next;

printf("scan()...\n");

while(a-next b-next)

{

a=a-next;

b=b-next;

if(a-xh = m-xh)

{

*p=a;

*q=b;

printf("xh=%d grade = %d\n", (*p)-xh, (*q)-grade);

getch();

}

}

}

conlink(struct conlink *head,struct linklist1 *p,struct linklist2 *q)

/**用頭插法建立單鏈表c**/

{

struct conlink *a;

printf("conlink()...\n");

a=(struct conlink *)malloc(sizeof(struct conlink));

a-xh=p-xh;

a-grade=q-grade;

a-next=head-next;

head-next=a;

}

outlist1(struct linklist1 *head,struct linklist1 *p)

/**刪除a單鏈表中學號最大的結(jié)點(最大的結(jié)點用scan函數(shù)已經(jīng)找出)**/

{

while(head-next head-next!=p)

head=head-next;

head-next=p-next;

free(p);

}

outlist2(struct linklist2 *head,struct linklist2 *q)

/**刪除b單鏈表中對應的結(jié)點**/

{

while(head-next head-next!=q)

head=head-next;

head-next=q-next;

free(q);

}

output(struct conlink *head)

/**輸出c鏈表**/

{

while(head-next!=0)

{

printf("%d %d\n",head-next-xh,head-next-grade);

head=head-next;

}

}

main()

{

struct linklist1 *a;

struct linklist2 *b;

struct linklist1 *p;

struct linklist2 *q;

struct conlink *head;

a=creat1();

b=creat2();

head=(struct conlink *)malloc(sizeof(struct conlink));

head-next=0;

while(a-next!=0)

{

scan(a,b,p,q);

conlink(head,p,q);

outlist1(a,p);

outlist2(b,q);

}

output(head);

getch();

}

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

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

其次,insert函數(shù)的目的應該是想插入數(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);

}

編寫函數(shù)插入一個結(jié)點到鏈表之中 C語言

如果已知一個節(jié)點指針pre和一個節(jié)點指針cur,要把cur插入到pre節(jié)點之后,很顯然要保證鏈表不會斷開而丟失后面的節(jié)點,要先把后面的節(jié)點指針(指向lat的指針)保存下來,即有cur-next

=

pre-next,然后把cur連接的一串鏈表連接到pre后面,即pre-next

=

cur;

上面介紹了,在一個節(jié)點之后插入節(jié)點的情況。這是通常的情況。如果要向一個鏈表的頭部插入節(jié)點,就只需要將新節(jié)點的下一個指針指向鏈表的頭指針即可。

在這種情況下,有兩點要注意:

1,鏈表是否為空鏈表

2,要插入的節(jié)點是不是空指針。

代碼實現(xiàn):

//向單鏈表中插入一個節(jié)點(插入在鏈開始處)

//輸入?yún)?shù):單鏈表的頭指針和要插入的節(jié)點指針

//輸出參數(shù):無

//返回值:指向單鏈表的頭指針

singlelist*

insert(singlelist

*head,singlelist

*node)

{

if(node

==

null)

{

return

head;

}

else

if(head

==

null)

{

return

node;

}

node-next

=

head;

head

=

node;

return

head;

}

編寫C語言函數(shù)insert_list完成將給定的數(shù)據(jù)插入到單鏈表的指定位置上

s-data=y;

寫反了。

void insert_list(list *head,int i,int y)

{

list *p,*s;int j=0;

p=head;

do

{

p=p-next;

j++;

}while(ji-1);

if(j==i-1)

{

s=(list *)malloc(sizeof(list));

/* 這里寫反了 y=s-data; */

s-data=y;

s-next=p-next;

p-next=s;

}

}

C語言單鏈表數(shù)據(jù)插入和打印

1.main函數(shù)中的LinkList L;

改成

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

2.PrintfList函數(shù)中把L = (LinkList)malloc(sizeof(LNode));這一句去掉

原因是main函數(shù)中的L變量是個沒初始化的野指針,L作為參數(shù)傳入TailCreateList函數(shù)并不會改變L的值,這點你可以調(diào)試的時候跟蹤L的值

本文名稱:c語言單鏈表插入函數(shù) C語言建立單鏈表
本文鏈接:http://www.rwnh.cn/article16/doohgdg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設計、ChatGPT、網(wǎng)站內(nèi)鏈企業(yè)網(wǎng)站制作

廣告

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

搜索引擎優(yōu)化
保亭| 达拉特旗| 永顺县| 龙游县| 上饶市| 年辖:市辖区| 石首市| 额济纳旗| 江阴市| 桂林市| 裕民县| 德安县| 宜章县| 泸定县| 新丰县| 当涂县| 唐山市| 江达县| 内江市| 荆州市| 阿勒泰市| 通许县| 花垣县| 沅江市| 会昌县| 札达县| 石阡县| 涪陵区| 阿合奇县| 上杭县| 达尔| 安泽县| 延津县| 维西| 定兴县| 高雄县| 建昌县| 安丘市| 贺兰县| 介休市| 五家渠市|