新人博主为大二在校生,大一学过一次数据结构可怎奈当时草草划水而过,因此今天这里准备重拾数据结构,为了不再囫囵而过,想在csdn上留下学习记录(dalao略过就好),也欢迎大家讨论指正,在此谢过。
话不多说,今天学习的部分是线性表的顺序表部分。 下面给出顺序表的实现代码和应用——建立一个简易的通讯录。(最终效果在最底部)
// SeqList_test.h 部分 #include//模板类在头文件里写 using namespace std; template class SeqList { public: SeqList() { length = 0; } //无参构造函数 缺少这行会显示“没有合适的默认构造函数使用” SeqList(T a[], int n); //有参构造函数 void PrintList(); //遍历元素函数 T Delete(int n); //删除函数 int Locate(T x); //查找顺序表中值为x的元素 T Get(int i); //获取顺序表第i个位置上的元素 void Insert(int i, T x); //在第i个位置上插入元素x private: T data[N]; //存储顺序表数据元素的数组 int length; //顺序表的长度 }; template SeqList ::SeqList(T a[], int n) { if (n > N) throw"数组长度超过顺序表最大长度"; for (int i = 0; i < n; i++) data[i] = a[i]; length = n; } template //本例中所使用的遍历函数 void SeqList ::PrintList() { //按序号依次遍历顺序表中的各个数据元素 for (int i = 0; i < length; i++) data[i].print(); cout << endl; } template void SeqList ::Insert(int i, T x) { if (length >= N) throw"上溢异常"; if (i<1 || i>length + 1) throw"位置异常"; for (int j = length; j >= i; j--) data[j] = data[j - 1]; data[i - 1] = x; length++; } template T SeqList ::Delete(int i) { if (0 == length) throw"下溢异常"; if (i<1 || i>length) throw"位置异常"; T x = data[i - 1]; for (int j = i; j < length; j++) data[j - 1] = data[j]; length--; return x; } template T SeqList ::Get(int i) { if (i<1 || i>length) throw"查找位置非法"; return data[i-1]; } template int SeqList ::Locate(T x) { for (int i = 0; i < length; i++) if (data[i] == x)return i + 1; return 0; }
// SeqList_test.cpp 部分 #include"SeqList_test.h" #includeclass PHONEBOOK //“类”一定要“封装”好,别丢了大小括号...... { private: int m_ID; string m_name; string m_phone; string m_group; public: PHONEBOOK(){} //缺少这行会显示“没有合适的默认构造函数使用” PHONEBOOK(const int id, const char* name, const char* phone, const char* group) { //有参构造函数 m_ID = id; m_name = name; m_phone = phone; m_group = group; } void print() { //显示函数 cout << m_ID << 't' << m_name << 't' << m_phone << 't' << m_group << endl; } bool operator == (PHONEBOOK& p) { //重载“==”运算符,从而使locate()函数可用 if (p.m_ID == m_ID) return true; else return false; } }; void main() { PHONEBOOK pbook[4] = { {2020522033,"Yang","13695568789","classmates"}, {2020522034,"Tu","15601357298","myself"}, {2020522035,"Xiao","17982365545","classmates"}, {2020522036,"Li","13641552003","classmates"} }; PHONEBOOK record(2020522055, "Zhao", "13320056966", "classmates"); SeqList list(pbook, 4); cout << "通信录内容列表:" << endl; list.PrintList(); list.Insert(1, record); cout << "通信录内容列表:" << endl; list.PrintList(); PHONEBOOK x = list.Delete(3); cout << "删除元素:" << endl; x.print(); cout << "通信录内容列表:" << endl; list.PrintList(); int p = list.Locate(record); cout << "phoneix的位置是:" <
最终实现效果:
今天的记录就到这里啦。



