菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
60
0

顺序表

原创
05/13 14:22
阅读数 50055

     为了加深大家对C++的理解,我们还是继续通过实践的方式,今天,我们一起写一个顺序表,具体代码如下。

Seqlist.h具体内容如下:

const int DefaultSize = 100;

template <typename Type> class SeqList{
public:
	SeqList(int sz = DefaultSize)
		:m_nmaxsize(sz), m_ncurrentsize(-1){
		if (sz > 0){
			m_elements = new Type[m_nmaxsize];
		}
	}
	~SeqList(){
		delete[] m_elements;
	}
	int Length() const{					//get the length
		return m_ncurrentsize + 1;
	}
	int Find(Type x) const;				//find the position of x
	int IsElement(Type x) const;		//is it in the list
	int Insert(Type x, int i);			//insert data
	int Remove(Type x);					//delete data
	int IsEmpty(){
		return m_ncurrentsize == -1;
	}
	int IsFull(){
		return m_ncurrentsize == m_nmaxsize - 1;
	}
	Type Get(int i){					//get the ith data
		return i<0 || i>m_ncurrentsize ? (cout << "can't find the element" << endl, 0) : m_elements[i];
	}
	void Print();

private:
	Type *m_elements;
	const int m_nmaxsize;
	int m_ncurrentsize;
};

template <typename Type> int SeqList<Type>::Find(Type x) const{
	for (int i = 0; i < m_ncurrentsize; i++)
		if (m_elements[i] == x)
			return i;
	cout << "can't find the element you want to find" << endl;
	return -1;
}

template <typename Type> int SeqList<Type>::IsElement(Type x) const{
	if (Find(x) == -1)
		return 0;
	return 1;
}

template <typename Type> int SeqList<Type>::Insert(Type x, int i){
	if (i<0 || i>m_ncurrentsize + 1 || m_ncurrentsize == m_nmaxsize - 1){
		cout << "the operate is illegal" << endl;
		return 0;
	}
	m_ncurrentsize++;
	for (int j = m_ncurrentsize; j > i; j--){
		m_elements[j] = m_elements[j - 1];
	}
	m_elements[i] = x;
	return 1;
}

template <typename Type> int SeqList<Type>::Remove(Type x){
	int size = m_ncurrentsize;
	for (int i = 0; i < m_ncurrentsize;){
		if (m_elements[i] == x){
			for (int j = i; j < m_ncurrentsize; j++){
				m_elements[j] = m_elements[j + 1];
			}
			m_ncurrentsize--;
			continue;
		}
		i++;
	}
	if (size == m_ncurrentsize){
		cout << "can't find the element you want to remove" << endl;
		return 0;
	}
	return 1;
}

template <typename Type> void SeqList<Type>::Print(){
	for (int i = 0; i <= m_ncurrentsize; i++)
		cout << i + 1 << ":\t" << m_elements[i] << endl;
	cout << endl << endl;
}

#include <iostream>
#include "SeqList.h"
using namespace std;
int main()
{
	SeqList<int> test(15);
	int array[15] = { 2, 5, 8, 1, 9, 9, 7, 6, 4, 3, 2, 9, 7, 7, 9 };
	for (int i = 0; i < 15; i++){
		test.Insert(array[i], 0);
	}
	test.Insert(1, 0);
	cout << (test.Find(0) ? "can't be found " : "Be found ") << 0 << endl << endl;
	test.Remove(7);
	test.Print();
	test.Remove(9);
	test.Print();
	test.Remove(0);
	test.Print();
	cin.get();
	return 0;
}

图1 运行效果

发表评论

0/200
60 点赞
0 评论
收藏
为你推荐 换一批