資料結構之線性表 1

2021-08-15 00:13:30 字數 1907 閱讀 3201

線性表一般分為順序表和煉表,本篇是對順序表的回顧,以c++建立簡單學生健康管理系統為例。

順序表是線性表基於陣列的儲存表示。其定義是:將線性表中的所有項,根據其邏輯順序(有序或無序皆可),依次儲存到一片連續的空間裡面,空間的開始位置會被指定好(一般實際起始位置在執行時分配)。

1.順序表節點的結構體定義:

struct student

;

2.順序表的類定義:

class seqlist

//析構函式

int length() const //此處的 const 表示該函式不能修改類的資料成員

void search(int nodes); //查詢表中的某一項

bool insertdata(int i, student& stu); //插入資料(傳入引用以實現修改實參)

bool removedata(int i); //刪除某一項

void input(); //初始化輸入

void readdata(); //從檔案中讀取

void wridata(); //寫入檔案

void output(); //輸出整個順序表

};

3.各函式的具體實現

seqlist::seqlist()

}void seqlist::input()

while ((data[i].node >= 0) && (i <= maxsize - 1));

}void seqlist::search(int nodes)

} if (i == 0) }

bool seqlist::insertdata(int i, student& stu) //插入時先檢查當前表的大小,及插入位置的合法性

data[i].node = stu.node;

data[i].name = stu.name;

data[i].birthday = stu.birthday;

data[i].*** = stu.***;

data[i].health = stu.health;

last++;

return true;

}bool seqlist::removedata(int i) //同理刪除某一項時,先檢查

last--;

return true;

}void seqlist::readdata()

file.close();

output();

}void seqlist::wridata()

file.close();

}void seqlist::output()

}

4.對順序表的解析:

(1)已知資料在順序表中的節點位置時,要得到該資料十分容易,直接用陣列下標即可

(2)當不知到資料的位置,進行搜尋時,則要對每個節點逐個進行比較,這時平均要比較(n+1)/2個表項

(3)當要插入資料時,需要將插入位置之後的每一項都後移乙個位置,整體來說平均要移動n/2個表項

(4)當要刪除資料時,與插入同理,改向後移動為向前移動即可,平均移動(n-1)/2個表項

總體來說:順序表是易查詢(已知位置時),難修改的,或者說修改順序表的時間複雜度較高,它需要一片連續的空間。因此,順序表不適用於插入或刪除頻繁的情況,也不適合儲存空間需求不定的情況。下一章為鍊錶,與順序表恰好相對應。

資料結構之線性表(1)

線性表 零個或多個資料元素的有限序列。在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。線性表抽象型別定義 adt 線性表 list data operation initlist l 初始化線性表 listempty l 線性表為空返回true,否則返回false clearlist l 清...

資料結構之線性表(1)

部分可以先看一下不用理解,也可以忽略主要對概念的理解,只有把概念理解好了,才能知道題目怎麼去解 線性表是n個資料特性相同的元素的組成有限序列,是其他資料結構的基礎 線性表的邏輯結構無疑就是線性結構線性結構有很多如後面要學的棧,佇列,串,陣列 都是線性結構,而線性表是最基本的線性結構 知道邏輯結構之後...

1 資料結構之線性表

線性表是最常用且最簡單的一種資料結構,簡言之,乙個線性表是n個資料元素的有限序列。1 線性表長度 線性表中元素的個數n n 0 定義為線性表的長度 2 空表 線性表長度 0 1 插入 2 追加 特殊形式的插入 3 刪除 標號 看作陣列名,但不是陣列 編號 pos 追加 特殊形式的插入 源 1 1 線...