線性表及其相關操作

2021-09-12 14:45:44 字數 3886 閱讀 6432

一、定義

線性表是最基本、最簡單、也是最常用的一種資料結構。線性表(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。

線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,迴圈鍊錶邏輯層次上也是一種線性表(儲存層次上屬於鏈式儲存),但是把最後乙個資料元素的尾指標指向了首位結點)。

線性表(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。資料元素是乙個抽象的符號,其具體含義在不同的情況下一般不同。

在稍複雜的線性表中,乙個資料元素可由多個資料項(item)組成,此種情況下常把資料元素稱為記錄

(record),含有大量記錄的線性表又稱檔案

(file)。

線性表的相鄰元素之間存在著序偶關係。如用(a1,…,ai-1,ai,ai+1,…,an)表示乙個順序表,則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i=1,2,…,n-1時,ai有且僅有乙個直接後繼,當i=2,3,…,n時,ai有且僅有乙個直接前驅。

二、結點定義

#define list_init_size     100

#define listincrement 10

typedef int elemtype;

typedef elemtype status;

typedef struct sqlist;

三、具體操作的相關**1.sqlist.h

#define list_init_size     100

#define listincrement 10

typedef int elemtype;

typedef elemtype status;

typedef struct sqlist;

bool initlist_sq(sqlist &l);

bool listinsert_sq(sqlist &l, int i, elemtype e);

bool listdelete_sq(sqlist &l, int i, elemtype &e);

int listlength_sq(sqlist &l);

int greater(elemtype ar**1, elemtype ar**2);

int less(elemtype ar**1, elemtype ar**2);

int equal(elemtype ar**1, elemtype ar**2);

void mergelist_sq(sqlist la, sqlist lb, sqlist &lc); //歸併兩個線性表中的元素,使其有序排列

int locateelem_sq( sqlist &l, elemtype e, status(*compare)(elemtype, elemtype) );

void show_sq(sqlist &l);

2.sqlist.cpp

#include"sqlist.h"

#include#includebool initlist_sq(sqlist &l)

l.length = 0;

l.listsize = list_init_size;

return true;

}bool listinsert_sq(sqlist &l, int i, elemtype e)

if (l.length >= l.listsize)

l.elem = newbase;

l.listsize += listincrement;

} elemtype*q = &(l.elem[i - 1]);

for (elemtype *p = &(l.elem[l.length - 1]); p >= q; --p)

*q = e;

++l.length;

return true;

}bool listdelete_sq(sqlist &l, int i, elemtype &e)

elemtype* p = &(l.elem[i - 1]); //5 2 7 4 6 3

e = *p;

elemtype* q = l.elem + l.length - 1; //末尾

for (++p; p <= q; ++p) //p指向第二個元素

--l.length;

return true;

}int greater(elemtype ar**1, elemtype ar**2) //大於

int less(elemtype ar**1, elemtype ar**2) //小於

int equal(elemtype ar**1, elemtype ar**2) //等於

int listlength_sq(sqlist &l)

void mergelist_sq(sqlist la, sqlist lb, sqlist &lc)

elemtype* pa_last = la.elem + la.length - 1;

elemtype* pb_last = lb.elem + lb.length - 1;

while (pa <= pa_last && pb <= pb_last) //相同長度進行歸併

else if (*pa > *pb)

else

}while (pa <= pa_last)

while (pb <= pb_last) }

int locateelem_sq(sqlist &l, elemtype e, status(*compare)(elemtype, elemtype))

if (i <= l.length)

else }

void show_sq(sqlist &l)

for (int i = 0; i < l.length; i++)

printf("\n");

}

3.main.cpp

#include#include"sqlist.h"

#include#includeint main()

show_sq(mysqlist);

listdelete_sq(mysqlist, 10, e);

printf("%d\n", e);

show_sq(mysqlist);

int pos = locateelem_sq(mysqlist, 5, equal);

printf("%d\n", pos);

sqlist la;

initlist_sq(la);

sqlist lb;

initlist_sq(lb);

sqlist lc;

initlist_sq(lc);

//srand( (unsigned)time(null) );

for (int i = 1; i <= 5; i++)

show_sq(la);

for (int i = 1; i <= 5; i++)

show_sq(lb);

mergelist_sq(la, lb, lc);

show_sq(lc);

//此處缺少摧毀函式,有意者自行新增

}

四、**執行結果

線性表的相關操作

順序表的建立 status initlist sqlist l 順序表的銷毀 status destroylist sqlist l 順序表的清空 status clearlist sqlist l 判斷順序表是否為空 status listempty sqlist l 順序表的元素個數 int l...

線性表順序儲存相關操作

線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。下面給出關於線性表順序儲存常用操作的 include define maxsize 20 儲存空間初始分配量 define true 1 define false 0 typedef int elemtype typede...

6 線性表的相關操作

建立線性表 銷毀線性表 清空線性表 將元素插入線性表 將元素從線性表中刪除 獲取線性表中某個位置的元素 獲取線性表的長度 線性表在程式中表現為一種特殊的資料型別 線性表的操作在程式中的表現為一組函式 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img umzyeoic 1610235...