線性表--鏈表(C語言實現)


線性表是最基本的一種數據結構,是0個以上數據元素的有限序列。

由線性表的定義,我們可以得出線性表的兩個特性。

首先它是一個序列,即元素之間是有序的。除了第一個元素外,每一個元素都有且只有一個直接前驅元素;除了最后一個元素外,每一個元素都有且只有一個直接后驅元素。也就是說,元素之間是一對一連接起來的。

其次它的元素是有限的,最少為0個,當元素為0個時,稱之為空表。

根據線性表的序列特性,計算機可以用兩種方法來實現線性表:

1、開辟一塊連續的內存,將數據元素一個一個放入進去,說白了也就是用數組來實現線性表。這種實現方式對於讀數據來說比較快,但對於插入和刪除來說,就比較尷尬了。一般來說,不會用這種方法實現線性表這種數據結構。

2、鏈表。(重點來了)

鏈表是一種遞歸的數據結構。

鏈表中的元素為結點,結點由兩部分組成,一是存儲元素值的數據域、二是存儲指向下一個結點地址的指針域(或者是NULL),如果該結點的指針域為NULL,則稱該結點為尾結點,也就是鏈表的結尾。

以下簡單的代碼讓同學們更加直觀的感受一下鏈表。

 

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef int ElemType;
typedef struct node
{
  ElemType data;
  struct node* next;
}Node, *PNode;

 

// 聲明創建鏈表函數

PNode CreateList(void); 

 // 聲明遍歷鏈表函數
void PrintfList(PNode List);

 

int main()
{
  PNode List = CreateList();
  PrintfList(List);
  getchar();

  return 0;
}

PNode CreateNode()
{
  PNode newNode = (PNode)malloc(sizeof(Node));

  if (newNode == NULL) {
    printf("out of memory.\n");
    exit(1);
  }

  newNode->next = NULL;

  return newNode;
}

 


PNode CreateList(void)
{
  int length; //鏈表個數,作為循環結束的條件
  ElemType data; //鏈表結點數據域的值
  PNode Head = CreateNode();
  PNode s = Head;

  printf("輸入鏈表個數:");
  scanf_s("%d", &length);
  for (int i = 1; i <= length; i++){
    PNode P = CreateNode();
    printf("第%d個結點的data值:", i);
    scanf_s("%d", &data);

    while (s->next) {
      s = s->next;
    }
    P->data = data;
    s->next = P;
  }
  getchar();
  printf("創建鏈表成功\n");
  return Head;
}

void PrintfList(PNode List)
{
  PNode P = List->next;
  printf("鏈表為:");
  if (P == NULL) {
    printf("鏈表為空");
  }
  while (P != NULL){
    printf("%d", P->data);
    P = P->next;
  }
  printf("\n");
}

 可能有人會說,就這么簡單的輸出幾個數字,搞得這么麻煩,我一個數組就直接搞定了。

 哼,我才不管你呢。增刪的好處我也不會告訴你的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM