一個簡單結點的結構體表示為:
struct note
{
int data; /*數據成員可以是多個不同類型的數據*/
struct note *next; /*指針變量成員只能是-個*/
};
一個簡單的單向鏈表的圖示
1.鏈表是結構、指針相結合的-種應用,它是由頭、中間、尾多個鏈環組成的單方向可伸縮的鏈表,鏈表上的鏈環我們稱之為結點。
2.每個結點的數據可用-個結構體表示,該結構體由兩部分成員組成:數據成員與結構指針變量成員。
3.數據成員存放用戶所需數據,而結構指針變量成員則用來連接(指向)下-個結點,由於每-個結構指針變量成員都指向相同的結構體,所以該指針變量稱為結構指針變量。
4.鏈表的長度是動態的,當需要建立-個結點,就向系統申請動態分配-個存儲空間,如此不斷地有新結點產生,直到結構指針變量指向為空(NULL)。申請動態分配-個存儲空間的表示形式為:
(struct note*)malloc(sizeof(struct note))
鏈表的建立
在鏈表建立過程中,首先要建立第一個結點,然後不斷地
在其尾部增加新結點,直到不需再有新結點,即尾指針指向
NULL為止。
設有結構指針變量 struct note *p,*p1,*head;
head:用來標志鏈表頭;
p:在鏈表建立過程中,p總是不斷先接受系統動態分配的新結點地址。
p1->next:存儲新結點的地址。
鏈表建立的步驟:
第一步:建立第一個結點
struct node
{
int data;
struct node *next;
};
struct note *p,*p1,*head;
head=p1=p=(struct node *)malloc(sizeof(struct node);
第二步:
給第-個結點成員data賦值並產生第二個結點
scanf(“%d”,&p->data); /*輸入10*/
p=(struct node *)malloc(sizeof(struct node);
第三步:將第-個結點與第二個結點連接起來
p1-> next=p;
第四步:產生第三個結點
p1=p;
scanf(“%d”,&p->data);/*輸入8*/
p=(struct node *)malloc(sizeof(struct node);
以後步驟都是重復第三、四步,直到給出-個結束條件,不再建新的結點時,要有
p->next=NULL;它表示尾結點。
代碼
#include <stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct node)
struct node
{
int data;
struct node *next;
};
main()
{ struct node *p, *pl,* head;
head=p=(struct node * )malloc(LEN);
scanf("%d",&p->data);/*頭結點的數據成員*/
while(p->data!=0) /*給出0結束條件,退出循環*/
{ pl=p;
p=(struct node * )malloc(LEN);
scanf("%d",&p->data);/*中間結點數據成員*/
pl->next=p;/*中間結點的指針成員值*/
}
p-> next=NULL;/*尾結點的指針成員值*/
p=head;/*鏈表顯示*/
printf("鏈表數據成員是:");
while(p->next!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("%d\n",p->data);
}