資料結構(廣義表)

2021-09-26 02:50:55 字數 1170 閱讀 2735

廣義表:

廣義表的基本概念:

允許線性表中元素既可以是原子元素,也可以是另外乙個表,則稱這樣的表為廣義表。

廣義表的定義是遞迴的,因為在描述廣義表時時又用到了廣義表自身的概念。廣義表可以記作:ls=(a1,a2,a3,a4…an)

ls為廣義表的名字,ai為廣義表的元素。

當廣義表為空時,稱第乙個元素為a1為廣義表ls的表頭,稱其餘元素組成廣義表的表尾,任何乙個非空廣義表的表頭元素可能是原子元素,也可能是表元素,但其尾元素一定是廣義表。

廣義表具有以下特徵:

1.廣義表是一種線性結構,,其長度為最外層包含的元素個數。

2.廣義表中的元素可以是子表,而子表的元素還可以是子表,因此,廣義表是一種多層次的結構。

3.乙個廣義表可以為其他廣義表所共享

4.廣義表可以是遞迴的

廣義表的儲存結構(鏈式儲存)

為了區分某個鏈結點儲存的是原子元素還是表元素,每個連線點都應該含有乙個標誌。因此,由三部分組成:

flag data/pointer link

其中flag為標誌位,令

1 本鏈節點為表元素節點

flag=

0 本鏈結點為原子節點

廣義表的這種鍊錶型別可以描述如下:

typedef struct node ; //第二個域定義

struct node *link;

}bsnode,*bslinklist;

求廣義表的長度

int bslistlen(bslinklist list)

return n;

}採用到遞迴方式:

int bslistlen(bslinklist list)

求廣義表的深度:

int bslistdepth(bslinklist list)

else

p = null;

}if (depth > maxdep)//求得最大層次數

maxdep = depth;

p = stack[top];

depth = stack[top–];

p = p->link;

} while (p!=null||top!=-1);

}return maxdep + 1;//求得廣義表的深度

}

主要應用為多元多項式的表示

資料結構 廣義表

廣義表 lists,又稱列表 是一種非線性的 資料結構 是線性表 的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。思想 廣義表就類似下圖的結構,他的大體 下圖第一行 相當於乙個帶頭結點的鍊錶,思想,首先要有乙個頭結點為head型別,每乙個廣義表有且只有乙個head,而後每個節點...

資料結構 廣義表

概念 陣列和廣義表可以看成是線性表在下述含義上的擴充套件,表中資料元素本身也是乙個資料結構。廣義表也可以看作是線性表的推廣。1 廣義表的元素可以是子表,而子表的元素還可以包含子表。2 列表可以被其他列表所共享。3 列表可以是乙個遞迴的表,也就是說列表也可以是自身的子表。由於廣義表裡面的資料元素可以具...

資料結構 廣義表

一 問題概述 廣義表是非線性的資料結構,是由若干個元素組合而成的,廣義表中可以有子表,類似這樣的 我們以c a,b,c,d 為例,將它定義為這樣的資料結構 我們會給定字串的形式,如 char str a,b,c,d 然後將它轉化為如上的資料結構。二 解決辦法 1 將符號 看作是頭節點,然後將是數值的...