A. c語言鏈表,求用通俗的話解釋
鏈表是一種常見的重要的數據結構.它是動態地進行存儲分配的一種結構.我們知道,用數組存放數據時,
必須事先定義固定的長度(即元素個數).比如,有的班級有100人,而有的班只有30人,如果要用同一個數組先後存放不同班級的學生數據,則必須定義長度為100的數組.如果事先難以確定一個班的最多人數,則必須把數組定得足夠大,以能存放任何班級的學生數據.顯然這將會浪費內存.鏈表則沒有這種缺點,它根據需要開辟內存單元.圖10.11表示最簡單的一種鏈表(單向鏈表)的結構.鏈表有一個"頭指針"變數,圖中以head表示,它存放一個地址.
該地址指向一個元素.鏈表中每一個元素稱為"結點",每個結點都應包括兩個部分:一為用戶需要用的實際數據,二為下一個結點的地址.課以看出,head指向第一個元素;第一個元素又指向第二個元素;……,直到最後一個元素,該元素不再指向其它元素,它稱為'表尾",它的地址部分放一個"NULL"(表示"空地址").鏈表到此結束.
可以看到:鏈表中各元素在內存中可以不是連續存放的.要找某一元素,必須先找到上一個元素,根據它提供的下一元素地址才能找到下一個元素.
如果不提供"頭指針"(head),則整個鏈表都無法訪問.鏈表如同一條鐵鏈一樣,一環扣一環,中間是不能斷開的.打個通俗的比方:幼兒園的老師帶領孩子出來散步,老師牽著第一個小孩的手,第一個小孩的另一隻手牽著第二個孩子,……,這就是一個"鏈",最後一個孩子有一隻手空著,他是"鏈尾".要找這個隊伍,必須先找到老師,然後順序找到每一個孩子.
B. C語言鏈表的使用方法
D
答案D設置完,p就從鏈表中丟掉了。
p就是一個指向結構體node的指針。
p->next就是p包含的執行下一個node的指針,在本題,就是q。
C. C語言中鏈表怎麼定義
c中沒有類的概念,所以只能用struct來實現,如:
struct user{
int id;
double value;
user *next;
};
這里用next指針來實現指向下一個節點的功能,如:
struct user u1,u2;
u1.next=&u2;
D. C語言鏈表概念
struct node
{
int data;
struct node *next;
}
這個是一個鏈表的定義,next就是本身的一個指針
可以這么理解,鏈表就是一串珠子,每個珠子就是一個結構體,next就是串珠子的線
E. c語言中鏈表的概念和簡單的實現
鏈表
鏈表概述
鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。它可以根據需要開辟內存單元。鏈表有一個「頭指針」變數,以head表示,它存放一個地址。該地址指向一個元素。鏈表中每一個元素稱為「結點」,每個結點都應包括兩個部分:一為用戶需要用的實際數據,二為下一個結點的地址。因此,head指向第一個元素:第一個元素又指向第二個元素;……,直到最後一個元素,該元素不再指向其它元素,它稱為「表尾」,它的地址部分放一個「NULL」(表示「空地址」),鏈表到此結束。
單向鏈表
單向鏈表的每個結點中除信息域以外還有一個指針域,用來指出其後續結點,單向鏈表的最後一個結點的指針域為空(NULL)。單向鏈表由頭指針唯一確定,因此單向鏈表可以用頭指針的名字來命名,例如頭指針名為head的單向鏈表稱為表head,頭指針指向單向鏈表的第一個結點。
簡單實現為:
#define NULL 0
typedef int DATATYPE
typedef struct node
{DATATYPE info;
node *next;
}LINKLIST;
雙向鏈表
每個結點中只包括一個指向下個結點的指針域,這種鏈表稱為單向鏈表。如果要在單向鏈表一個指針所指的當前位置插入一個新結點,就必須從鏈表頭指針開始逐個遍歷直到當前指針所指結點的前一結點,修改這個結點的指針。雙向鏈表的每個結點中包括兩個指針域,分別指向該結點的前一個結點和後一個結點。在雙向鏈表中由任何一個結點都很容易找到其前面的結點和後面的結點,而不需要在上述的插入(及刪除)操作中由頭結點開始尋找。
簡單實現為:
typedef struct node
{ DATATYPE info;
node *priv, *next;
}DINKLIST;
循環鏈表
單向鏈表的最後一個結點的指針域為空(NULL)。如果將這個指針里利用起來,以指向單向鏈表的第一個結點,就組成一個單向循環鏈表。
這里有一篇好文章:http://myweb.yzu.e.cn/toby88/c/cstudy/shenru/jiegou/lianbiao.htm
F. C語言中怎麼定義鏈表,最好把各個代碼都詳細的解釋一下!
/*creat a list*/
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head;
int num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please input 5 numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4) ptr->next=NULL;
else ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{ printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}
}
上面是一個簡單的創建鏈表的C程序。所謂鏈表形象的講就是一個數據塊裡面存有數據,並且存有下一個數據的指針,這樣一個指一個形成一個數據鏈。這個數據鏈可以被操作,例如插入數據,刪除數據,等。至於指令,首先定義一個結構體,它存有數據和指向下一個數據塊的指針。然後分配空間。注意最後一個為NULL,當然你也可以指向開頭一個數據塊形成一個循環鏈表。
G. 計算機c語言 鏈表是什麼,怎麼用
一種數據結構。鏈表的單元有兩部分組成。一個是本單元的數據,一個是指向下一個單元的指針。這樣一個一個單元鏈接起來的。具體的看看書或者網路一下吧
H. C語言中怎麼定義鏈表,最好把各個代碼都詳細的解釋一下!
/*creat
a
list*/
#include
"stdlib.h"
#include
"stdio.h"
struct
list
{
int
data;
struct
list
*next;
};
typedef
struct
list
node;
typedef
node
*link;
void
main()
{
link
ptr,head;
int
num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please
input
5
numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4)
ptr->next=NULL;
else
ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{
printf("The
value
is
==>%d\n",ptr->data);
ptr=ptr->next;
}
}
上面是一個簡單的創建鏈表的C程序。所謂鏈表形象的講就是一個數據塊裡面存有數據,並且存有下一個數據的指針,這樣一個指一個形成一個數據鏈。這個數據鏈可以被操作,例如插入數據,刪除數據,等。至於指令,首先定義一個結構體,它存有數據和指向下一個數據塊的指針。然後分配空間。注意最後一個為NULL,當然你也可以指向開頭一個數據塊形成一個循環鏈表。
I. C語言中鏈表的原理該如何使用坐等指教 多謝啦
一樓的答案很標准了,我再通俗地說明下-----你把鏈表看成一輛火車,火車頭就是頭結點,然後每節車廂有號碼標識,比如1號車廂車尾就連上2號車廂車頭,這就像1號節點的指針域裡面存儲的是下一個節點的地址,每節車廂裡面容納乘客的地方就相當於數據域。
至於鏈表的種類有很多,有單鏈表的,雙連表的,循環鏈表的,還有有頭結點和無頭節點的。總之原理都大同小異。
對於鏈表的操作主要有插入和刪除:
插入:在第i個節點之前插入一個節點:
1、首先查找第i-1個節點 if(p滿足條件)
2、給新節點分配空間q =(Node*)malloc(sizeof(Node));給q數據域賦值。
3、q->next = p->next;
4、p->next = q;
刪除:如果要刪除符合條件的節點(刪除q所指節點)
1、首先找到要刪除節點的前驅節點 if(p->next->data滿足條件)
2、用q指向要刪除的節點 q = p->next;
3、p->next = q->next;
4、free(q);
說再多不如你實際操作,你可以寫一個很簡單的鏈表數據試試...
希望對你有所幫助!
J. C語言的鏈表怎麼用
c語言中,動態鏈表的使用方法:
1、創建節點的結構體類型,裡面要有一個指向此類型結構的指針。
2、建立一個頭指針,一個尾指針
3、每次有新節點進入鏈表時,用malloc分配空間,然後用鏈表尾端的節點指針指向新節點,新節點的指針指向null。