一、定義
線性表是最基本、最簡單、也是最常用的一種資料結構。線性表(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...