1、從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪元素的值,若順序表為空則顯示出錯資訊並退出執行
分析:
我們先選擇使用陣列來表示順序儲存。
結點的資料結構如下:
template
struct sqnode
;實現邏輯:
按序找出最小的元素,然後後面的每乙個元素向前挪一位
完整**如下:
#include
using
namespace std;
#define maxsize 50
template
<
typename elemtype>
struct sqnode
;//從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪元素的值,若順序表為空則顯示出錯資訊並退出執行
template
<
typename elemtype>
bool
deleteminelemnode
(sqnode
&l,elemtype &deldata)
deldata = l.data[0]
;int pos =0;
//記錄最小元素的位置
//找出最小元素的位置,並記錄最小元素的值
for(
int i =
1; i < l.length;
++i)
}//後面的元素依次向前移動一位
for(
int i = pos; i< l.length-1;
++i)
l.length--
;return
true;}
intmain()
cout<
"刪除前順序表元素依次為:"
;for
(int i =
0; i < sqnode.length;
++i)
cout<<
" "<
;int deldata;
deleteminelemnode
(sqnode,deldata)
; cout<
"刪除後順序表元素依次為:"
;for
(int i =
0; i < sqnode.length;
++i)
cout<<
" "<
; cout<
"刪除的元素為:"
<
return0;
}
執行結果:
第乙個例子寫了完整**。後續不再寫完整**,只寫演算法的主要實現過程
2、設計乙個高效演算法。將順序表l的所有元素逆置。要求演算法的空間複雜度為o(1)。
設計思路:
比如順序表裡元素為a1、a2、a3、a4、a5。我們可以直接從順序表中間乙份為2,進行首尾兩兩互換,a1與a5換,a2與a4換。這樣不再需要額外的空間開銷(兩個數互換,不借助第三個數)。
實現過程:
int
reverse
(sqnode &l)
}
3、對長度為n的順序表l,編寫乙個時間複雜度為o(n)、空間複雜度為o(1)的演算法,該演算法刪除順序表上所有值為x的資料元素。設計思路:順次遍歷順序表,將值不等於x的資料元素的個數用k表示,然後第k位放第k個不等於x的元素。
實現過程:
int
deletex
(sqnode &l,
const elemtype x)
l.length = k;
}return0;
}
4、從有序順序表中刪除其值在給定值s與t之間的所有元素(sint
deletestot
(sqnode &l,
const elemtype s,
const elemtype t)
for(
int i =
1; i < l.length;
++i)
else
if(l.data[i-1]
<= t && l.data[i]
> t)if(
!st)
l.data[i -
(st - sk)
]= l.data[i];}
return0;
}人,總是要有一點精神的,不是嗎
資料結構 簡單的順序表結構
編寫乙個程式exp2 1.cpp,實現順序表的各種運算 假設順序表的元素型別為char 並在此基礎上完成如下功能 1 初始化順序表l 2 採用尾插法依次插入元素a,b,c,d,e 3 輸出順序表l 4 輸出順序表l的長度 5 判斷順序表l是否為空 6 輸出順序表l的第3個元素 7 輸出元素a的位置 ...
資料結構 順序表簡單操作
基於靜態陣列的順序表簡單操作 初始化 尾插 尾刪 頭插 頭刪 讀任意位置元素 修改任意位置元素 查詢指定元素值的下標 在任意位置插入元素 seqlist.h pragma once include include include include include define seqlistmax 1...
資料結構(C )簡單順序表
資料結構學過了模板之後就開始了線性表的學習,線性表又分為簡單的順序儲存和鏈式儲存兩種方式。兩種方法各有長短,根據不同的實際情況定義使用。是零個或多個具有相同型別的資料元素的有限序列。通常的線性表中有兩個元素,乙個是儲存的資料,另乙個是表資料的長度。線性表的順序儲存,是指用一維位址連續的儲存單元依次儲...