當前位置:首頁 » 編程語言 » c語言指針鏈表

c語言指針鏈表

發布時間: 2025-08-16 00:08:08

① 問下c語言鏈表的問題 前面結構體里定義的指針和函數里定義的結構體指針有什麼不同,看了n久了,還是看

以下代碼是一個鏈表的逆置操作代碼,供參考
#include<stdio.h>
#include<stdlib.h>

structnode{
intn;//結點中的數據
structnode*next;//指向後繼結點的指針
}*list=NULL;//表頭,初值NULL,表示空表
voidcreateList()//建立鏈表
{
structnode*p;//臨時結點指針
inti;

for(i=5;i>0;i--)
{
p=(structnode*)malloc(sizeof(structnode));//申請一個結點
p->n=i;//數據賦值
//以下兩句,實現頭插法建立鏈表
p->next=list;//把新結點p裝在表頭前
list=p;//p成為新的表頭
}
}
voidshowList()
{
structnode*p=list;
while(p)
{
printf("%d",p->n);
p=p->next;
}
printf(" ");
}

voidreverseList()
{
structnode*p=NULL,*h=list,*t;

while(h)
{
t=h;//分離出一個結點
h=h->next;//h指向後續的部分,保持原表不丟失

t->next=p;//頭插法
p=t;
}
list=p;//表頭指針賦值
}

intmain()
{
printf("link: ");
createList();//建表
showList();//顯示表
reverseList();//逆置
showList();//再顯示
return0;
}

② C語言中:鏈表中的指針與指針域的區別

這是兩個不同的概念。
1
指針是C語言中的一個數據類型。在鏈表的節點中,可能包含多個指針。
2
指針域是指的鏈表中用來指向相關節點的指針,一般是下一個,對於雙向鏈表,也包括指向上一個的指針。
3
對於鏈表節點,可以分為數據域和指針域兩部分。數據域中可能包含有指針類型。指針域中必然是指針類型。

③ C語言 鏈表 指針問題

1、刪除指針,並不會釋放他指向的內存地址。

2、如果你指向的地址還需要用,為什麼要刪除其指針。同一個地址可以有多個指針。

你可以在結構里定義2個鏈表指針,分別是正向和反向,這樣你輸入的的時候,就直接得到正反兩個鏈表了。我寫了案例,你參考吧。

#include<stdio.h>
#include<malloc.h>
#definesize5//你想輸入的鏈表個數
typedefstructstt
{
charnum;
structstt*next0;//正向鏈表指針
structstt*next1;//反向鏈表指針
}STT;
STT**creatSTT();//創建一條鏈表,返回其正向鏈表首節點及尾節點組成的指針數組
voidprintSTT(STT*sttHead,intflag);//列印鏈表,flag=0列印正向鏈表,flag=1列印反向鏈表

intmain()
{
intn=size,i;
STT*sttHead=(STT*)malloc(sizeof(STT)),*stt0[n],*stt1[n],**stts=NULL;
for(i=0;i<n;i++)
{
stts=creatSTT();
stt0[i]=stts[0];//這就是你想要得到的正向鏈表首指針數組
stt1[i]=stts[1];//這就是你想要得到的反向鏈表首指針數組
}

printf("輸入的所有鏈表為 ");
for(i=0;i<size;i++)
{
sttHead->next0=stt0[i];
printSTT(sttHead,0);
}
printf("所有反轉鏈表為 ");
for(i=0;i<size;i++)
{
sttHead->next1=stt1[i];
printSTT(sttHead,1);
}
return0;
}

STT**creatSTT()
{
charnum;
STT*stt0=NULL,*sttTail=NULL,*sttNew=NULL,**stts;
stts=(STT**)malloc(sizeof(STT*)*2);//存放首尾節點的指針數組
printf("請連續輸入一串數字組成鏈表:(非數字字元將被過濾) ->");
while(1)
{
num=getchar();
if(num>='0'&&num<='9')
{
sttNew=(STT*)malloc(sizeof(STT));
sttNew->num=num;
sttNew->next0=NULL;
sttNew->next1=NULL;
if(stt0==NULL)
stt0=sttNew;
else
{
sttTail->next0=sttNew;//連接正向鏈表指針
sttNew->next1=sttTail;//連接反向鏈表指針
}
sttTail=sttNew;
}
if(num==' ')
break;
}
stts[0]=stt0;
stts[1]=sttTail;
returnstts;
}
voidprintSTT(STT*sttHead,intflag)
{
if(flag==0)
{
while(sttHead->next0)
{
printf("%c",sttHead->next0->num);
sttHead=sttHead->next0;
}
printf(" ");
}
else
{
while(sttHead->next1)
{
printf("%c",sttHead->next1->num);
sttHead=sttHead->next1;
}
printf(" ");
}
}

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:585
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:881
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:574
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:761
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:677
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1005
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:250
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:108
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:799
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:705