線性表順序存儲結構_____c/c++(簡易版)適合初學者!

前言
*初學者一定要一行一行看!!!!,我相信你會學會的。
ok,上源碼
如果哪裏有錯或者哪裏不懂歡迎留言,我每天都在!

#include <iostream>
using namespace std;
#define maxsize 20  //自定以宏定義maxsize=20 他是一個常量
#define ok 1 //同上
#define error 0 //同上
typedef int Elemtype;	//人話:定義Elemtype它是整型可以拿他當int用
class list {
	public:
		int data[maxsize];
		int length; //當前長度
};
//查詢操作
int getElem(list l,int i,Elemtype* e) {//格式:(鏈表長度L,獲取位置i,獲取元素的類型+變量名)
	if (l.length = 0 || i<1 || i>l.length) {
		return error;
	}
	*e = l.data[i - 1];
	return ok;
}
//插入操作
int insert(list* L,int i,Elemtype e) {//e爲要插入數據 可根據需要定義類型
	int k;
	if (L->length == maxsize) {//順序線性表已經滿了
		return error;
	}
	if (i<1 || i>L->length + 1) {//i不在線性表的長度範圍內
		return error;
	}
	if (i <= L->length) {//符合要求
		for (k = L->length - 1; k >= i - 1;k--) {
			L->data[k+ 1] = L->data[k];
		}
	}	
	L->data[i - 1] = e;//將要插入的元素加進去
	L->length++;
}
//刪除操作
int dele(list* L, int i,Elemtype* e) {
	int t;
	if (i < 1 || i > L->length)
		return error;
	*e = L->data[i-1];
	if (i <L->length) {
		for (t = i; t <L->length ; t++) {
			L->data[t - 1] = L->data[t];
		}
	}
	L->length--;
	return ok;
}
int main() {
	list p;
	p = { {1,2,3,4,5},10 };//爲順序表初始化數據(其中{1,2,3,4,5}就是順序表裏的數據,10代表他的當前長度)
	cout << "遍歷初始數據***********" << endl;
	for (int j = 0; j < 5; j++) {
		cout << p.data[j] << ",";
	}
	cout << endl << endl;
	//刪除表中第二個位置的數
	cout << "刪除位置爲2後的結果:";
	dele(&p,2,&p.data[2]);
	for (int j = 0; j < 4; j++) {
		cout << p.data[j] << ",";
	}
	cout << endl << endl;
	insert(&p, 3, 9);
	cout << "在位置3插入數據後的結果:";
	//遍歷(人話:把數組裏所有數都打印出來)
	for (int i = 0; i < 5; i++) {
		cout << p.data[i]<<",";
	}
	cout << endl << endl;
}
//優點:1.無需爲表中元素之間的邏輯關係而增加額外存儲空間
//		2.可以快速存取表中任意位置的元素
//缺點:
//		1.插入和刪除操作需移動大量元素
//		2.當線性表長度變化較大時,難以確定存儲空間容量
//		3.容易造成存儲空間的碎片。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章