【初学数据结构系列】 顺序表的实现——通讯录
生活随笔
收集整理的這篇文章主要介紹了
【初学数据结构系列】 顺序表的实现——通讯录
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? 新人博主為大二在校生,大一學過一次數(shù)據(jù)結(jié)構(gòu)可怎奈當時草草劃水而過,因此今天這里準備重拾數(shù)據(jù)結(jié)構(gòu),為了不再囫圇而過,想在csdn上留下學習記錄(dalao略過就好),也歡迎大家討論指正,在此謝過。
? 話不多說,今天學習的部分是線性表的順序表部分。?下面給出順序表的實現(xiàn)代碼和應(yīng)用——建立一個簡易的通訊錄。(最終效果在最底部)
// SeqList_test.h 部分#include <iostream> //模板類在頭文件里寫 using namespace std;template <class T, int N>class SeqList { public:SeqList() { length = 0; } //無參構(gòu)造函數(shù) 缺少這行會顯示“沒有合適的默認構(gòu)造函數(shù)使用”SeqList(T a[], int n); //有參構(gòu)造函數(shù)void PrintList(); //遍歷元素函數(shù)T Delete(int n); //刪除函數(shù)int Locate(T x); //查找順序表中值為x的元素T Get(int i); //獲取順序表第i個位置上的元素void Insert(int i, T x); //在第i個位置上插入元素x private:T data[N]; //存儲順序表數(shù)據(jù)元素的數(shù)組int length; //順序表的長度 };template<class T, int N> SeqList<T, N>::SeqList(T a[], int n) {if (n > N) throw"數(shù)組長度超過順序表最大長度";for (int i = 0; i < n; i++)data[i] = a[i];length = n; }/* 初始遍歷函數(shù) template<class T, int N> void SeqList <T, N>::PrintList() {cout << "按序號依次遍歷線性表中的各個數(shù)據(jù)元素" << endl;for (int i = 0; i < length; i++)cout << "data[i]" << endl;cout << endl; } */template<class T, int N> //本例中所使用的遍歷函數(shù) void SeqList<T, N>::PrintList() { //按序號依次遍歷順序表中的各個數(shù)據(jù)元素for (int i = 0; i < length; i++)data[i].print();cout << endl; }template<class T, int N> void SeqList <T, N>::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<class T, int N> T SeqList<T, N>::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<class T, int N> T SeqList<T, N>::Get(int i) {if (i<1 || i>length) throw"查找位置非法";return data[i-1]; }template<class T, int N> int SeqList<T, N>::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" #include<string>class PHONEBOOK //“類”一定要“封裝”好,別丟了大小括號...... { private:int m_ID;string m_name;string m_phone;string m_group; public:PHONEBOOK(){} //缺少這行會顯示“沒有合適的默認構(gòu)造函數(shù)使用”PHONEBOOK(const int id, const char* name, const char* phone, const char* group) { //有參構(gòu)造函數(shù)m_ID = id;m_name = name;m_phone = phone;m_group = group;}void print() { //顯示函數(shù)cout << m_ID << '\t' << m_name << '\t' << m_phone << '\t' << m_group << endl;}bool operator == (PHONEBOOK& p) { //重載“==”運算符,從而使locate()函數(shù)可用if (p.m_ID == m_ID)return true;elsereturn 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<PHONEBOOK, 100>list(pbook, 4);cout << "通信錄內(nèi)容列表:" << endl;list.PrintList();list.Insert(1, record);cout << "通信錄內(nèi)容列表:" << endl;list.PrintList();PHONEBOOK x = list.Delete(3);cout << "刪除元素:" << endl;x.print();cout << "通信錄內(nèi)容列表:" << endl;list.PrintList();int p = list.Locate(record);cout << "phoneix的位置是:" <<p<< endl;}? 最終實現(xiàn)效果:?
?
? ?今天的記錄就到這里啦。?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的【初学数据结构系列】 顺序表的实现——通讯录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下sakai配置过程
- 下一篇: 社区护理 100404