【线性表】顺序表

来源:互联网 发布:k3即时库存 sql 编辑:程序博客网 时间:2024/04/30 21:05

SeqList.h

#ifndef SEQLIST_H#define SEQLIST_H#include<iostream>const int default_size = 100;//SeqListtemplate<typename T>class SeqList{public:typedef T value_type;typedef T* pointer;SeqList(int size = default_size);//constructor~SeqList();//destructorint get_length();//get lengthbool is_empty(); // whether SeqList is empty or notvoid traverse();//traverse SeqListvoid clear();//clear SeqListbool get_elem(int i, pointer value);//get the ith dataint locate(value_type value);//find the position of valuebool insert(int i, value_type value);//insert data in the ith placebool remove(int i, pointer value);//remove the ith dataprivate:pointer element;const int max_size;//max sizeint cur_len;//current length};//constructortemplate<typename T>SeqList<T>::SeqList(int size):cur_len(0){if (size > 0){element = new T[size];max_size = size;}else{element = new T[default_size];max_size = default_size;}}//destructortemplate<typename T>SeqList<T>::~SeqList(){delete[] element;}//get lengthtemplate<typename T>int SeqList<T>::get_length(){return cur_len;}// whether SeqList is empty or nottemplate<typename T>bool SeqList<T>::is_empty(){return cur_len == 0 ? true : false;}//traverse SeqListtemplate<typename T>void SeqList<T>::traverse(){for (int i = 0; i < cur_len; i++){std::cout << element[i] << " ";}std::cout << std::endl;}//clear SeqListtemplate<typename T>void SeqList<T>::clear(){for (int i = 0; i < cur_len; i++){element[i]=T();}cur_len = 0;}//get the ith datatemplate<typename T>bool SeqList<T>::get_elem(int i, pointer value){if (cur_len == 0 || i<1 || i>cur_len)return false;*value = element[i - 1];return true;}//find the position of valuetemplate<typename T>int SeqList<T>::locate(value_type value){for (int i = 0; i < cur_len; i++){if (element[i] == value)return i + 1;}return 0;}//insert data in the ith placetemplate<typename T>bool SeqList<T>::insert(int i, value_type value){if (cur_len == max_size || i<1 || i>cur_len + 1)return false;for (int j = cur_len; j>i-1; j--){element[j] = element[j - 1];}element[i - 1] = value;cur_len++;return true;}//remove the ith datatemplate<typename T>bool SeqList<T>::remove(int i, pointer value){if (cur_len == 0 || i<1 || i>cur_len)return false;*value = element[i - 1];for (int j = i; j < cur_len; j++){element[j - 1] = element[j];}cur_len--;return true;}#endif
main.cpp

#include"SeqList.h"using namespace std;int main(){SeqList<int> int_list;cout << int_list.get_length() << endl; //0cout << boolalpha << int_list.is_empty() << endl;//truefor (int i = 0; i < 10; i++){int_list.insert(i, i);}int_list.traverse();//1 2 3 4 5 6 7 8 9 int value;if (int_list.get_elem(5, &value))cout << "get element succeed,value is " << value << endl;//get element succeed,value is 5elsecout << "get element fail" << endl;cout << int_list.locate(8) << endl;//8if (int_list.insert(7, 20))cout << "insert succeed" << endl;//insert succeedelsecout << "insert fail" << endl;if (int_list.remove(8, &value))cout << "remove succeed,remove value is " << value << endl;//remove succeed,remove value is 7elsecout << "remove fail" << endl;int_list.traverse();//1 2 3 4 5 6 20 8 9 cout << int_list.get_length() << endl;//9int_list.clear();cout << int_list.get_length() << endl;//0return 0;}

0 0