慕课网关于线性表通讯录代码

demo.cpp

#include <iostream> 

#include <string> 

#include "LinkedList.h" 
using namespace std; 


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


cout<<"请输入:";
int order=0;
cin>>order;
return order;
}
void createPerson(LinkedList *pList){
Node node;
Person person;
cout<<"请输入姓名:";
cin>>person.name;
cout<<"请输入电话:";
cin>>person.phone;
node.data=person;
pList->ListInsertTail(&node);
}
int main(void){ 
int userOrder=0;
LinkedList *pList=new LinkedList();
while (userOrder!=4)
{
userOrder=menu();
switch (userOrder)
{
case 1:
cout<<"用户指令--->>新建联系人:"<<endl;
createPerson(pList);
break;
case 2:
cout<<"用户指令--->>删除联系人:"<<endl;
break;
case 3:
cout<<"用户指令--->>浏览通讯录:"<<endl;
pList->ListTraverse();
break;
case 4:
cout<<"用户指令--->>退出通讯录:"<<endl;
break;
default:
cout<<"指令输入错误,请重新输入!"<<endl;
break;
}
}
delete pList;
pList=NULL;
system("pause");
return 0;

}

/****************************************************************************************************************/

Person.cpp

#include "Person.h" 
#include <ostream> 
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; 

}

/*****************************************************************************************************************/

Person.h

#ifndef Person_h 
#define Person_h 
#include <stdio.h> 
#include <string> 
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

/******************************************************************************************************/

Node.cpp

#include "Node.h" 
#include <iostream> 
using namespace std; 
void Node::printData(){ 
cout << data << endl; 

}

/*********************************************************************************************************/

Node.h

#ifndef Node_h 
#define Node_h 
#include "Person.h" 
class Node{ 
public: 
void printData(); 
public: 
Person data; 
Node *next; 
Node *prev; 
}; 

#endif

/*************************************************************************************************/

LinkedList.cpp

#include "LinkedList.h" 
#include <iostream> 
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; 
while(CurrentNode->next != NULL){ 
CurrentNode = CurrentNode->next; 
CurrentNode->printData(); 

cout << endl; 

}

/*********************************************************************************************************/

LinkedList.h

#ifndef LinkedList_h
#define LinkedList_h
#include <stdio.h> 
#include "Node.h" 
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

/********************************************************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值