資料結構(1)—— 資料結構的三大結構
阿新 • • 發佈:2019-02-13
計算機程式設計 = 資料結構 + 演算法
資料結構研究變數的管理方式,演算法研究解決特定問題的方法。
資料結構分三個層次:邏輯結構(抽象層)、物理結構(結構層)、運算結構(實現層)。
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、排序/查詢
演算法應用