1. 程式人生 > >資料結構(1)—— 資料結構的三大結構

資料結構(1)—— 資料結構的三大結構

計算機程式設計 = 資料結構 + 演算法
資料結構研究變數的管理方式,演算法研究解決特定問題的方法。
資料結構分三個層次:邏輯結構(抽象層)、物理結構(結構層)、運算結構(實現層)。

1.1 資料結構的邏輯結構

邏輯結構指人對資料之間關係的理解和看法,邏輯結構和計算機無關。
邏輯結構:
1、集合結構:這種結構表示資料可以合併成一個整體。
  這是資料之間關係最弱的一種,就僅比那個一點關係都沒有的強一點。
2、線性結構:這種結構中資料之間有一對一的關係(如排隊)。
3、樹型結構:這種結構中資料之間有一對多的關係,這個關係稱為父子關係(典型的如細胞分裂)。
4、網狀結構:這種結構中資料之間有多對多的交叉對映關係。

(我們主要研究線性結構和樹型結構。)

1.2 資料結構的物理結構

物理結構描述計算機內部資料之間實際的關係。
物理結構:
1、順序結構:結構中的資料元素存放在一段連續的記憶體空間中,典型代表就是陣列。隨機訪問方便,插入刪除複雜。
2、鏈式結構:這種結構中不同的資料被儲存在計算機裡不同的地方,他們的物理位置之間完全沒有關係。鏈式結構由多個節點構成,每個節點中包括有效資料和至少一個指標變數。
對鏈式結構進行操作時,如果不會修改結構則使用一級指標變數就可以了,如果會修改結構則需要使用二級指標變數,其實,一級指標變數也可以修改鏈式結構。
鏈式結構適合進行插入刪除操作,不適合進行隨機訪問。

/*鏈式結構練習*/
#include <stdio.h>

typedef struct node{
    int num;
    struct node *p_next;//void *p_next;
}node;
node node1 = {1,NULL};

int main(){
    node *p_head = NULL;//頭指標
    node node2 = {2,NULL};
    static node node3 = {3,NULL};
    node node5 = {5,NULL};//新添一個節點,把它加入連結串列中

    p_head = &node1;
    node1.p_next
= &node2; node2.p_next = &node3; //用二級指標把新增節點5掛上去 /*node **pp_tmp = &p_head; while (*pp_tmp){ pp_tmp = &((*pp_tmp)->p_next); } *pp_tmp = &node5;*/ //第二種把新增節點5加進去的方法 node *p_tmp = NULL; if (p_head){ p_tmp = p_head; while (p_tmp->p_next){ p_tmp = p_tmp->p_next; } p_tmp->p_next = &node5; } else { p_head = &node5; } //顯示所有節點資料 p_tmp = p_head; while (p_tmp){ printf("%-3d",p_tmp->num); p_tmp = p_tmp->p_next; } printf("\n"); return 0; }

邏輯結構可以採用多種物理結構實現,它們之間沒有明確的一對一的關係。

1.3 資料結構的運算結構

資料結構的基本操作(運算結構):
1、建立/銷燬
  分配資源、建立結構、釋放資源
2、插入/刪除
  增加、減少資料元素
3、獲取/修改
  遍歷、迭代、隨機訪問
(增刪改查)
4、排序/查詢
  演算法應用