對於非空的線性表而言,它具有如下4個特點:
①表中有且僅有乙個開始節點
②表中有且僅有乙個終端節點
③除了開始節點和終端節點外,其他每個元素前面均有且僅有乙個稱為直接前趨的資料元素,它的後面均有且僅有乙個稱為直接後繼的資料元素
④雖然不同線性表的資料元素可以是各種各樣的,但是同一線性表中的資料元素必須具有相同的資料型別
typedef int elemtlemype;//定義元素型別
class sqlist
;
(2)空間分配
陣列屬於複合型資料型別,在使用它之前,必須為其分配空間
//引數initsize為使用者所申請的空間大小
sqlist :: sqlist()
if(isfull())//表滿重新分配記憶體
elemtype* p=&(elem[i-1]);
elemtype* q=&(elem[length-1]);
for(;q>=p;--q)
*(q+1)=*q;
*p=e;
++length;
return
true;
}
(4)刪除操作
bool sqlist::del(int i)
elemtype* p=&(elem[i-1]);
elemtype* q=&(elem[length-1]);
for(++p;p<=q;++p);
*(p-1)=*p;
--length;
return true;
}
乙個完整的示例:
//標頭檔案 sqlist.h
#include
#ifndef sqlist_h_
#define sqlist_h_//定義標頭檔案
#define initsize 100//初始化大小
#define increment 10//增長步長
typedef
int elemtype;//定義元素型別
class sqlist
;#endif // sqlist_h_
//過載函式
#include"seqlist.h"
using
namespace
std;
//建構函式
sqlist::sqlist()
//是否為空
bool sqlist::isempty() const
//是否滿了
bool sqlist::isfull() const
elemtype sqlist::getelem(int i) const
else
return elem[i-1];
}bool sqlist::insert(int i,elemtype e)
if(isfull())//表滿重新分配記憶體
elemtype* p=&(elem[i-1]);
elemtype* q=&(elem[length-1]);
for(;q>=p;--q)
*(q+1)=*q;
*p=e;
++length;
return
true;
}bool sqlist::insert(elemtype e)
elemtype* p=&(elem[length]);
*p=e;
++length;
return
true;
}void sqlist::creat()
else}}
void sqlist::merge(sqlist &la,sqlist &lb)
else
}while(i<=la.length)
while(j<=lb.length)
cout
<
cout
elemtype* p=&(elem[i-1]);
elemtype* q=&(elem[length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--length;
return
true;
}void sqlist::displayelem()
//主程式
演算法設計與分析筆記(一)
遞迴與分治策略 遞迴的概念,典型應用 hanoi問題,程式如下 include void hanoi int n,char a,char b,char c void main 分治的基本思想 將乙個規模為n的問題分解成k個規模較小的子問題,然後遞迴解決這些問題。二分搜尋技術 include defi...
演算法分析與設計學習筆記1
下面哪乙個不是演算法的特性?同乙個數學模型使用不同的資料結構會有不同的演算法,有效性有很大差別 計算此偽 表示的演算法中加法的執行次數 答案 2t 1 1 解析 此類問題適合初學者進行練習,初學者接觸此類問題最好找從頭到尾梳理一遍,將題中所給資料帶入所給偽 中進行計算來梳理思路。運算過程 n最開始為...
演算法設計與分析學習筆記(一)
輸入包含n個整數是陣列a和整數x,求出滿足a i a j x的i和j,如果沒有這樣的元素和,則返回 1,否則返回1 暴力法 思路 設定兩個for迴圈,第乙個設定基準數,然後利用已知數x減去基準數之後,再使用乙個for迴圈來進行匹配減去得到的數,如果存在該數,則返回1.如果不存在,則繼續找下乙個基準數...