廣義表
廣義表是一種非線性的資料結構,是一種較為簡單的資料結構,是線性表的擴充套件,是乙個由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.除首元素和尾元素外,每個元素都只有唯一的前段和後端 我詞真窮 樣例 線性表,堆,棧,佇列,陣列 基本指一維的 鍊錶 非線性...
線性結構和非線性結構
線性結構和非線性結構 線性結構是乙個有序資料元素的集合。其中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。常用的線性結構有 線性表,棧,佇列,雙佇列,陣列,串。非線性結構中各個資料元素不再保持在乙個線性序列中,每個資料元素可能與零個或者多個其他資料...