(1)廣義表中的資料元素有相對次序
(2)廣義表的長度定義為最外層包含元素的個數
(3)廣義表的深度定義為所含括弧的重數,其中原子的深度為0,空表的深度為1
(4)廣義表可以共享,乙個廣義表可以為其他廣義表共享,這種廣義表叫做再入錶
(5)廣義表可以是乙個遞迴的表;乙個廣義表可以是自己的子表,這種廣義表叫做遞迴表,遞迴表的深度是無窮的,長度是有限的
(6)任何乙個非空廣義表gl=(a1,a2,a3,…,an)均可分為表頭head=a1和表尾tail=(a2,a3….,an)
typedef struct inode
val;
struct inode *link; //指向下乙個元素
}glnode;
原理:在廣義表中,同一層次的每個節點是通過link域連線起來的,所以可以把它看成link域連線起來的單鏈表
演算法:求廣義表長度就是第一層單鏈表的長度,求單鏈表的長度得到廣義表長度
//求廣義表的長度
int gllength(glnode *g)
return n;
原理:對於帶頭節點的廣義表g,其深度等於所有子表中最大深度加1,若g為原子,其深度為0;g為空表,其深度為1.
0 —— g為原子
1 —— g為空表
max(f(subg))+1 —— g有子表
//利用遞迴求廣義表深度
int gldepth(glnode *g)
g=g->link; //在兄弟中找到深度最深的子表
} return(max+1);
} 隊子表遞迴式輸出
//輸出廣義表
void dispgl(glnode *g)
//再處理g的兄弟
if(g->link!=null)
}
輸入 複習 線性結構之陣列與廣義表
稀疏矩陣的壓縮儲存 廣義表陣列和廣義表都可以看成是表中資料元素本身也是資料結構的線性表 對於n維陣列來說,每個元素都受到n個關係的約束,在每個關係中aj1j2 jn都會有乙個直接後繼,因此,對於單個關係而言,仍為線性關係。n維陣列可以看為線性表的推廣且所有資料元素都屬於同一資料型別。陣列一旦被定義,...
廣義表操作 建立廣義表,判斷廣義表是否相等
建立廣義表 演算法思路 從字串行中分離出左部,右部,依次為左部和右部建立儲存 char s 61 設字串行長度不超過60 eg a,b c d,e,f g a i b int sever int a,int b i while k 0 s i i b return i eg a,b c d,e,f ...
廣義表取表頭表尾 5 4 廣義表
5.4.1 廣義表的概念 廣義表也是線性表的一種推廣。廣義表也是n個資料元素 d1,d2,d3,dn 的有限序列,但不同的是,廣義表中的di既可以是單個元素,還可以是乙個廣義表,通常記作 gl d1,d2,d3,dn gl是廣義表的名字,通常用大寫字母表示。n是廣義表的長度。若 di是乙個廣義表,則...