『壹』 在循環鏈表中,頭指針和鏈表指針的動態變化決定鏈表的長度嗎
不是,鏈表的長度確定之後是不可以改變的,當頭指針和尾指針動態變化進行插入刪除,只可以改變存儲鏈表裡元素的個數。
在循環隊列中,隊頭指針和隊尾指針的動態變化決定隊列的長度。在循環鏈表中,前一個結點指向後一個結點,而最後一個結點指向頭結點,只有頭結點是固定的。
線性鏈表中,由於前一個結點包含下一個結點的指針,尾結點指針為空,要插入或刪除元素,只需要改變相應位置的結點指針即可,頭指針和尾指針無法決定鏈表長度。
(1)鏈表頭結點存儲鏈表長度擴展閱讀
鏈表指針的使用
#include<stdio.h>
voidGai(int*m)
{
*m=5;
}
intmain(void)
{
inta=1;
Gai(&a);
printf("%d ",a);
return0;
}
『貳』 求單鏈表的長度
struct node {
int data;
struct node *next;
} ;
創建單鏈表後,最後一個結點的next是NULL,據此來遍歷表,獲得長度。
void get_len( struct node *head )
{
struct node *p=head->next ;
int len=0;
while ( p )
{
len++;
p=p->next;
}
head->data=len ; //存儲長度到頭結點
}
『叄』 函數:求有頭結點單鏈表長度
int CreateList(LinkList *head)代碼的while循環中,加入了一句話:
if (getchar() == ' ') break; //輸入換行時可跳出循環
新寫的int getLength(LinkList head)代碼如下:
完整代碼為:
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef int ElemType; /*定義表元素的類型*/
typedef struct LNode /*線性表的單鏈表存儲*/
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
/*創建單鏈表*/
int CreateList(LinkList *head);
/*函數定義*/
int getLength(LinkList head);
/*你的代碼將寫在此處*/
int CreateList(LinkList *head)
{
LNode *p, *q;
int e;
*head = (LinkList)malloc(sizeof(LNode));
if (!*head)
return ERROR;
(*head)->next = NULL;
p = *head;
while (scanf("%d", &e) == 1)
{
if (getchar() == ' ')
break; // 回車時跳出循環
q = (LNode *)malloc(sizeof(LNode));
if (!q)
return ERROR;
q->data = e;
q->next = NULL;
p->next = q;
p = q;
}
return OK;
}/*CreateList*/
int getLength(LinkList head)
{
LNode *p = head;
int len = 0;
while (p != NULL)
{
++len;
p = p->next;
}
return len;
}
int main()
{
LinkList L = NULL;
CreateList(&L);
printf("%d ", getLength(L));
return 0;
}
gcc編譯通過,望採納~
『肆』 鏈表長度
struct node {
int data;
struct node *next;
} ;
創建單鏈表後,最後一個結點的next是NULL,據此來遍歷表,獲得長度。
void get_len( struct node *head )
{
struct node *p=head->next ;
int len=0;
while ( p )
{
len++;
p=p->next;
}
head->data=len ; //存儲長度到頭結點
}
請採納答案,支持我一下。
『伍』 鏈表中頭結點和開始節點有什麼不同
一般而言,鏈表中的頭結點不存放數據,永遠在鏈表物理位置上的第一位,哪怕是空鏈表也有一個頭結點,其目的至少可以簡化鏈表的插入和刪除操作
這個開始結點當然指的是第一個有效數據的結點,從邏輯上說,直接鏈接在頭結點後面的那個結點才是
『陸』 單鏈表關於頭結點的意義怎麼理解不懂,求解釋
頭結點其實就是一個數據域為空的結點(當然也可儲存鏈表的長度之類的數據,一般對鏈表操作無影響),而首元結點就是第一個元素結點,即頭結點後邊的第一個結點。
頭結點的存在使得空鏈表與非空鏈表的處理操作一致,並且在第一個元素結點前插入結點(或刪除第一個結點),其操作與對其它結點一致。
怎麼理解上面的話呢?你可想像一下,如果不存在頭結點,第一個結點就是實際的第一個數據結點這種結構:對於空鏈表,每當對其進行添加或刪除都要判斷是否為空(因為若不為空,就可以直接刪除或者添加在尾部或中間);若對其進行插入操作,那麼就會出現在第一個元素之前插入的操作方式與插入兩個元素之間的操作就不一致(因為第一個元素之前並沒有結點,無需用指針指定前驅)。
有了頭結點,上面所有這些操作都可以統一的代碼實現,無需區分特例。
『柒』 求取某帶頭結點的單鏈表的長度,請補充完整代碼。
{ int i; struct node *p; l1=(List)malloc(sizeof(node)); l1->next=NULL; for(i=0;i<n;i++) { p=(List)malloc(sizeof(node)); scanf("%d",&(p->a)); p->next=l1->next; l1->next=p; } } int getListElem(List l1,int i,int &e) { struct node *p; int j=1; p=l1->next; while(p!=NULL&&j<i) { p=p->next; j++; } if(p==NULL||j>i) return 0; e=p->a; }
『捌』 試寫一演算法在帶頭結點的單鏈表結構上實現線性表操作Length(L)。下面各個步驟的解釋要詳細
intListLength_L(LinkList &L)
{
int i=0;//i存儲鏈表長度,
初始為0
LinkList p=L;//p為鏈表的指針,
初始為頭指針,指向頭結點
if(p) p=p-next;//如果p指向的頭結點不為空,
p指向帶數據的第一個結點
while(p){//如果p非空,i長度加1,且指向下一個結點
p=p->next;
i++;}
return i;
//返回i,即鏈表的長度
}。
『玖』 帶表頭結點的空循環雙向鏈表的長度等於 0 。
空表自然邏輯長度為0,但是由於有頭結點,因此,鏈表存儲中實際有一個結點
『拾』 JAVA數據結構單鏈表頭結點與尾結點以及計算單鏈表長度
head就是頭結點,也就是第一個節點。
最後一個結點,就是.next = null的節點。