栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

具体实现代码@数据结构探险——线性表应用之通讯录(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具体实现代码@数据结构探险——线性表应用之通讯录(二)

file:linkedList.hpp

#ifndef linkedList_hpp
#define linkedList_hpp

#include 
#include "Node.hpp"

class linkedList{
public:
    linkedList();
    ~linkedList();
    void ClearList();
    bool ListEmpty();
    int ListLength();
    bool getElem(int index,Node *pNode);
    int locateElem(Node *pNode);
    bool preElem(Node *pCurrentNode,Node *pPreNode);
    bool nextElem(Node *pCurrentNode,Node *pNextNode);
    void ListTraverse();
    bool ListInsert(int index,Node *pNode);
    bool ListDelete(int index,Node *pNode);
    bool ListInsertHead(Node *pNode);
    bool ListInsertTail(Node *pNode);
private:
    int m_iLength;
    Node *m_pList;
};

#endif 
file:linkedList.cpp

#include "linkedList.hpp"
#include 

using namespace std;

linkedList::linkedList(){
    m_pList = new Node;
    m_pList->next = NULL;
    m_iLength = 0;
}

bool linkedList::ListEmpty(){
    return m_iLength==0?true:false;
}

int linkedList::ListLength(){
    return m_iLength;
}

void linkedList::ClearList(){
    Node *CurrentNode = m_pList->next;
    while(CurrentNode != NULL){
 Node *temp = CurrentNode->next;
 delete CurrentNode;
 CurrentNode = temp;
    }
    m_pList->next = NULL;
    m_iLength = 0;
}

linkedList::~linkedList(){
    ClearList();
    delete m_pList;
    m_pList = NULL;
}

bool linkedList::ListInsertHead(Node *pNode){
    Node *temp = m_pList->next;
    Node *newNode = new Node;
    if(newNode == NULL){
 return false;
    }
    else{
 m_pList->next = newNode;
 newNode->data = pNode->data; 
 newNode->next = temp;

 m_iLength++;
 return true;
    }
}

bool linkedList::ListInsertTail(Node *pNode){
    Node *CurrentNode = m_pList;
    while(CurrentNode->next != NULL){
 CurrentNode = CurrentNode->next;
    }
    Node *newNode = new Node;
    if(newNode == NULL){
 return false;
    }
    else{
 CurrentNode->next = newNode;
 newNode->data = pNode->data;
 newNode->next = NULL;

 m_iLength++;
 return true;
    }
}

bool linkedList::ListInsert(int index, Node *pNode){
    if(index < 0 || index > m_iLength){
 return false;
    }
    else{
 Node *CurrentNode = m_pList;
 for(int k = 0;k < index;k++){
     CurrentNode = CurrentNode->next;
 }
 Node *newNode = new Node;
 if(newNode == NULL){
     return false;
 }
 else{
     newNode->data = pNode->data;
     newNode->next = CurrentNode->next;
     CurrentNode->next = newNode;

     m_iLength++;
     return true;
 }
    }
}

bool linkedList::ListDelete(int index, Node *pNode){
    if(index < 0 || index > m_iLength){
 return false;
    }
    else{
 Node *CurrentNode = m_pList;
 Node *CurrentNodePre = NULL;
 for(int k = 0;k < index;k++){
     CurrentNodePre = CurrentNode;
     CurrentNode = CurrentNode->next;
 }
 CurrentNodePre->next = CurrentNode->next;
 pNode->data = CurrentNode->data;
 delete CurrentNode;
 CurrentNode = NULL;
 m_iLength--;
 return true;
    }
}

bool linkedList::getElem(int index,Node *pNode){
    if(index < 0 || index > m_iLength){
 return false;
    }
    else{
 Node *CurrentNode = m_pList;
 Node *CurrentNodePre = NULL;
 for(int k = 0;k < index;k++){
     CurrentNodePre = CurrentNode;
     CurrentNode = CurrentNode->next;
 }
 pNode->data = CurrentNode->data;
 return true;
    }
}

int linkedList::locateElem(Node *pNode){
    Node *CurrentNode = new Node;
    int count = 0;
    while(CurrentNode->next != NULL){
 CurrentNode = CurrentNode->next;
 if(CurrentNode->data == pNode->data){
     return count;
 }
 else{
     count ++;
 }
    }
    return -1;
}

bool linkedList::preElem(Node *pCurrentNode,Node *pPreNode){
    Node *CurrentNode = m_pList;
    Node *tempNode = NULL;
    while(CurrentNode->next != NULL){
 tempNode = CurrentNode;
 CurrentNode = CurrentNode->next;
 if(CurrentNode->data == pCurrentNode->data){
     if(tempNode == m_pList){
  return false;
     }
     else{
  pPreNode->data = tempNode->data;
  return true;
     }
 }
    }
    return false;
}

bool linkedList::nextElem(Node *pCurrentNode,Node *pNextNode){
    Node *CurrentNode = m_pList;
    while(CurrentNode->next != NULL){
 CurrentNode = CurrentNode->next;
 if(CurrentNode->data == pCurrentNode->data){
     if(CurrentNode->next == NULL ){
  return false;
     }
     else{
  pNextNode->data = CurrentNode->next->data;
  return true;
     }
 }
    }
    return false;
}

void linkedList::ListTraverse(){
    Node *CurrentNode = m_pList;
    int count = 1;
    while(CurrentNode->next != NULL){
 CurrentNode = CurrentNode->next;
 cout << count << ".";
 CurrentNode->printData();
 count ++;
    }
    cout << endl;
}
file:Node.hpp

#ifndef Node_hpp
#define Node_hpp

#include "Person.hpp"

class Node{
public: 
    void printData();

public:
    Person data;
    Node *next;
    Node *prev;
};

#endif 
file:Node.cpp

#include "Node.hpp"
#include 

using namespace std;

void Node::printData(){
    cout << data << endl;
}
file:Person.hpp

#ifndef Person_hpp
#define Person_hpp

#include 
#include 

using namespace std;

class Person{
public:
    friend ostream &operator<<(ostream &out,Person &person);
    string name;
    string phone;
    Person &operator=(Person &person);
    bool operator==(Person &person);

};

#endif 
file:Person.cpp

#include "Person.hpp"
#include 

ostream &operator<<(ostream &out,Person &person){
    out << person.name << "------------" << person.phone << endl;
    return out;
}

Person &Person::operator=(Person &person){
    this->name = person.name;
    this->phone = person.phone;
    return *this;
}

bool Person::operator==(Person &person){
    if(this->name == person.name && this->phone == person.phone){
 return true;
    }
    else{
 return false;
    }
}
file:demo.cpp

#include 
#include 
#include "linkedList.hpp"

using namespace std;

int Menu(){
    //显示通讯录功能菜单
    cout << "功能菜单" << endl;
    cout << "1.新建联系人" << endl;
    cout << "2.删除联系人" << endl;
    cout << "3.浏览通讯录" << endl;
    cout << "4.退出通讯录" << endl;

    cout << "请输入:" << endl;

    int order = 0;
    cin >> order;

    return order;
}

void createPerson(linkedList *pList){
    Node node;
    Person person;
    cout << "请输入姓名:" << endl;
    cin >> person.name;
    cout << "请输入电话:" << endl;
    cin >> person.phone;
    node.data = person;
    pList->ListInsertTail(&node);
}

void deletePerson(linkedList *pList){
    Node node;

    int index = 0;
    cout << "请输入你需要删除的联系人序号:" << endl;
    cin >> index;

    pList->ListDelete(index, &node);
    cout << "已删除该联系人" << endl;
}

int main(void){
    linkedList *pList = new linkedList;

    int userOrder = 0;
    while(userOrder != 4){
 userOrder = Menu();
 switch(userOrder){
     case 1:
  cout << "用户指令--->>新建联系人:" << endl;
  createPerson(pList);
  break;
     case 2:
  cout << "用户指令--->>删除联系人:" << endl;
  deletePerson(pList);
  break;
     case 3:
  cout << "用户指令--->>浏览通讯录:" << endl;
  pList->ListTraverse();
  break;
     case 4:
  cout << "用户指令--->>退出通讯录:" << endl;
  break;
     default:
  break;
 }
    }
    delete pList;
    pList = NULL;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/233009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号