1. 試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert(l,i,b),並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。
status insert(linklist &l,int i,int b)//
在無頭結點鍊錶l的第
i個元素之前插入元素
belse
}//insert
2. 已知線性表中的元素以值遞增有序排列,並以單鏈表作儲存結構。試寫一高效的演算法,刪除表中所有值大於mink且小於maxk的元素(若表中存在這樣的元素)
status delete_between(linklist &l,int mink,int maxk)//
刪除元素遞增排列的鍊錶
l中值大於
mink
且小於maxk
的所有元素
}//delete_between
3. 試寫一演算法,實現順序表的就地逆置,即利用原表的儲存空間,將線性表(a1,a2,a3,.........,an)逆置為(an,an-1,........a1).
void reverse(sqlist &a)//
順序表的就地逆置
//reverse
4. 試寫一演算法,對單鏈表實現就地逆置。
void linklist_reverse(linklist &l)//
鍊錶的就地逆置
;為簡化演算法
,假設表長大於
2q->next=p;s->next=q;l->next=s;
}//linklist_reverse分析:
本演算法的思想是
,逐個地把
l的當前元素
q插入新的鍊錶頭部
,p為新表表頭
. 5. 已知由乙個線性鍊錶表示的線性表中含有:類字元的資料元素(如:字母字元、數字字元和其他字元),試編寫演算法將該線性鍊錶分割為三個迴圈鍊錶,其中每個迴圈鍊錶表示的線性表中均只含一類字元。
status linklist_divide(linklist &l,cilist &a,cilist &b,cilist &c)//
把單鏈表
l的元素按型別分為三個迴圈鍊錶
.cilist
為帶頭結點的單迴圈鍊錶型別
.else if(isdigit(s->data))
else
}//while
p->next=a;q->next=b;r->next=c; //
完成迴圈鍊錶
}//linklist_divide
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...
資料結構 線性表
include using namespace std define listsize 100 表空間的大小可根據實際需要而定,這裡假設為100 typedef int datatype datatype的型別可根據實際情況而定,這裡假設為int typedef struct seqlist 初始化...