1. 程式人生 > >C語言單向鏈表的實現

C語言單向鏈表的實現

fff 伸縮 style Language meta 分配 str next chm

一個簡單結點的結構體表示為:

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);
}

技術分享圖片

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

C語言單向鏈表的實現