C语言单向链表的实现
一個簡單結點的結構體表示為:
??? 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);
}
總結
以上是生活随笔為你收集整理的C语言单向链表的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何给DataGrid添加自动增长列
- 下一篇: 设计模式之C#实现---Builder