當前位置:首頁 » 編程語言 » 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(" ");
}
}

熱點內容
python爬蟲的書籍 發布:2025-08-16 02:43:26 瀏覽:103
87鍵盤源碼 發布:2025-08-16 02:15:13 瀏覽:845
app訪問網頁 發布:2025-08-16 02:14:37 瀏覽:856
編譯之後的鏈接是干什麼的 發布:2025-08-16 01:54:51 瀏覽:824
rust腐蝕伺服器ip地址 發布:2025-08-16 01:53:26 瀏覽:266
編程代中文 發布:2025-08-16 01:47:42 瀏覽:708
公積金賬戶密碼是哪裡的 發布:2025-08-16 01:41:50 瀏覽:870
如何從iphone查看wifi密碼 發布:2025-08-16 01:37:29 瀏覽:69
swf編譯器 發布:2025-08-16 01:27:51 瀏覽:120
存儲過程nvl 發布:2025-08-16 01:27:06 瀏覽:112