程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言單向鏈表的實現 圖解教程

C語言單向鏈表的實現 圖解教程

編輯:關於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);
}
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved