⑴ c語言創建鏈表那裡p->next還有很多類似的,該怎麼理解,
(1) 概念
線性鏈表,單鏈表,結點;數據域,指針域;頭指針,頭結點。
(2) 特點
用指針表示數據之間的邏輯關系(邏輯相鄰的元素物理位置不一定相鄰)。
(3) 類型定義
簡而言之,「數據+ 指針」。
typedef struct LNode{
DataType data;
struct LNode *next;
}LNode,*LinkList;
這里圖片傳不上去,不好意思,要不然可以更直觀地表示
(4) 基本形態
帶頭結點的單鏈表的基本形態有:
1°. 單鏈表空
條件:L->next==0
2°. 單鏈表不空
條件:L->next!=0
建立鏈表的方法
思路:
1、建立空表(頭結點);
2、依次插入數據結點
//偽代碼
voidCreateLinkList(LinkList&L,intn)
{
//建立空表
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//空表
p=L;//用p指向表尾
//插入元素
for(i=0;i<n;i++){
scanf(x);
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
//插入表尾
s->next=p->next;
p->next=s;
p=s;//新的表尾
}
}
⑵ 為什麼c語言刪除單鏈表要p→next→next != null如果我要刪除最後一個呢
temp=p;
p=p->next;
temp->next=NULL;
這三句存在問題,temp=p,讓temp指向p所指向的節點,p=p->next,p指向後移
temp->next=NULL,讓temp的後繼為空,這里出了問題,鏈表從temp指向的節點斷開,相當於刪除p之後的所有節點。
應該先判斷p是不是最後節點
if(p->next==NULL)
如果是,只好去找p的前趨pre,讓pre->next=NULL,free(p)
如果不是最後節點,將p的後繼節點數值域復制給p,然後將p的後繼節點刪除,等同與刪除p
p->data=p->next->data;
p->next=p->next->next;
free(p);
⑶ p->next->n在c語言中是什麼意思
p是一個指向結構體或共用體的指針,p->next就是取得這個結構體或共用體next成員,而next又是一個結構體或共用體指針,這裡面有一個成員n. p->next->n就是訪問這個n變數.
如果都是結構體, 大概是這樣子的:
struct
{
struct
{
char n;
...
}*next;
...
}*p;
⑷ C語言中p=p->next;語句是什麼意思一般作用是什麼
p=p->next是表示修改指針p的位置,把p指向原來的下一個節點。
作用是:
p1-p2-p3-....... p1->next=p1,那麼鏈表就斷了,p2,p3會找不到了,鏈表變成了 p1--| |-----|。->[0000]->[1111]->[2222]->[3333]->........ | p 開始時p指向節點[0000],那麼p->next指向的是節點[1111] 如果執行語句 p->next=p,實際上就是修改了指針p->next的位置,p沒有變。
鏈表變成了: ......->[0000]->| |_____| p ,其它節點還在,但是不能遍歷了,因為p->next 還是它自己本身,所以其它節點就找不到了,如果執行p=p->next,這樣是修改了p位置,鏈表變成如下: ......->[0000]->[1111]->[2222]->[3333]->........ | p。
(4)c語言ppnext擴展閱讀
C語言特點
1、C語言是一種結構化的語言,提供的控制語句具有結構化特徵。
2、c語言包含34個運算符,它將賦值、括弧等均視作運算符來操作,使C程序的表達式類型和運算符類型均非常豐富。
3、C語言可以生成高質量和高效率的目標代碼,故通常應用於對代碼質量和執行效率要求較高的嵌入式系統程序的編寫。
⑸ C語言數據結構:p->next和p=p->next的區別
p 是一個指向某類型結構的指針;
p->next 是 p 所指向的結構的 next 成員;
p = p->next 是把p->next 的值賦給 p。
如果這兩句語句中的 p 變數是同一個 p 的話,那麼p->next 的數據類型一定是一個指向結構的指針,而且所指向的結構的類型與p->next 所在結構的類型相同。
#include<stdio.h>
//鏈表的結構及其指針
structstru_num
{
intnum;
structstru_num*next;//結構本身不能含有同類型的結構,但可以含有指向同類型的指針
}*p;
intmain(void)
{
structstru_numlist[10];//鏈表
intindex;
p=list;//初始化指針
for(index=0;index<10;index++)//賦值
{
p->next=p+1;
p->num=index;
p=p->next;//與p++效果等同
}
(p-1)->next=NULL;//末元素指向空指針,
//輸入除首元素的其他元素
p=list;
for(index=0;index<9;index++)
printf("%d",(p[index].next)->num);
return0;
}
⑹ C語言中p->next=head;是意思
p->next=head;
就是把 head 所指的結點,鏈接到 p 所指的結點的後面(即 p 的「下一個」,指向 head)。
如果 p 所指的結點正好是 head 這個鏈表的尾結點時,通過這個語句,就把一個單向鏈表鏈接成了一個循環單鏈表。
⑺ C語言,p->next和p->data的區別
這里說到的是指針和鏈表,通俗點講。五個人排成一列,比如他們有一些共同的特點,都是男的,都是學生等。那麼p->data指的是當前這個人的特點(男的,學生)屬性,p->next指的是下一個人.
⑻ c語言鏈表中總出現一個p->next是什麼意思啊
意思就是。。。。這個東西是這個單元的尾部,把哪個單元的頭部賦值給它,這個單元緊接的就是誰,一般是用q
⑼ 在C語言鏈表中,p=q->next和p->next=q->next有什麼區別
給你普及下指針的真諦:
假設兩個鏈表節點的內存地址分別為AAAA和BBBB,節點內偏移4位元組處保存名為next的指針,
p = 0xAAAA,q=0xBBBB,這說明p和q分別指向這兩個節點。
p->next是內存AAAE處的內容,q->next是內存BBBF處的內容(假設為CCCC)
那麼, p = q->next 即p=0xCCCC
p->next = q->next,即將內存AAAE處的內容改為CCCC
兩值意義相差甚遠。
⑽ C語言 p.next與(*p).next有什麼區別
如果P是對象,並且P所屬的類具有next方法,則用P.next();
如果P指針,(*p)得到p指向的對象,在調用對象的next (*p).next,也可寫作p->next