廣義表(非線性結構)

2021-07-16 09:38:30 字數 2454 閱讀 4154

廣義表

廣義表是一種非線性的資料結構,是一種較為簡單的資料結構,是線性表的擴充套件,是乙個由n個元素組成的序列。實現廣義表主要是利用遞迴,將其分為子問題來進行解決。下面是一些常見型別的廣義表:

1)a = ();          常稱為「空表」

2)b = (a,b);          一般的廣義表

3)c = (a, b, (c, d))         具有子表的廣義表

4)d = (a, b, (c,(d)))        子表中有表的廣義表

5)e = ((),())         空表巢狀空表

一般對於廣義表採取的儲存方式為鏈式儲存,下面為簡單的儲存圖示:

對於上面的一些常見型別的廣義表,應當如何對其進行建立和操作?常見對於廣義表會對其進行建立、求廣義表的大小(這裡指有值的節點)、求廣義表的深度等操作。

下面是對廣義表操作的具體程式**:

--generallist.h檔案

#pragma once

#include //遞迴實現廣義表

enum type

;struct generallistnode

;     generallistnode(type type = head, int value = 0);       //構造節點

};class  generallist

;--generallist.cpp檔案

#include "generallist.h"

#include #include #include using namespace std;

generallistnode::generallistnode(type type, int value)       //構造節點

:_type(type)

, _next(null)

if (_type == sub)

}generallist::generallist()

:_head(null)

generallist::generallist(const char* str)

generallist::generallist(const generallist& list)

generallist& generallist::operator=(const generallist& list)

return *this;

}generallist::~generallist()

bool generallist::_isvalue(char ch)       //判斷值是否有效

else

}generallistnode* generallist::_createlist(const char*& str)      //創造廣義表

else

else if (*str == ')')        //表示子表結束

else}}

assert(false);

return head;

}void generallist::print()      //列印廣義表

size_t generallist::size()        //廣義表大小

size_t generallist::depth()    //廣義表深度

generallistnode* generallist::_copy(generallistnode* head)   //廣義表的拷貝

else if (cur->_type == sub)

cur = cur->_next;

}return newhead;

}void generallist::_print(generallistnode* head)     //列印

else if (cur->_type == value)

}else if (cur->_type == sub)

}cur = cur->_next;

}cout <

}size_t generallist::_size(generallistnode* head)      //大小(只計算值節點)

else if (cur->_type == sub)

cur = cur->_next;

}return size;

}size_t generallist::_depth(generallistnode* head)       //深度

}cur = cur->_next;

}return deep;

}void generallist::distroy(generallistnode* head)    //刪除所有節點

cur = cur->_next;

delete tmp;}}

線性結構和非線性結構

資料結構是計算機儲存 組織資料的方式。常見的資料結構分類方式如下圖 常用的線性結構有 線性表,棧,佇列,迴圈佇列,陣列。線性表中包括順序表 鍊錶等,其中,棧和佇列只是屬於邏輯上的概念,實際中不存在,僅僅是一種思想,一種理念 線性表則是在記憶體中資料的一種組織 儲存的方式。線性結構是最簡單最常用的一種...

線性結構與非線性結構

對於資料結構,感情是 在撓頭也要學啊 我愛資料結構,資料結構使我快樂 呵 這裡一點一點開始扯 線性資料結構 定義為 1.有唯一的首元素及尾元素,2.資料元素之間是一對一關係 3.除首元素和尾元素外,每個元素都只有唯一的前段和後端 我詞真窮 樣例 線性表,堆,棧,佇列,陣列 基本指一維的 鍊錶 非線性...

線性結構和非線性結構

線性結構和非線性結構 線性結構是乙個有序資料元素的集合。其中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。常用的線性結構有 線性表,棧,佇列,雙佇列,陣列,串。非線性結構中各個資料元素不再保持在乙個線性序列中,每個資料元素可能與零個或者多個其他資料...