您的位置:首页 > 其它

基于链表实现一个简单通讯录功能

2018-01-30 19:06 856 查看
       
#include<iostream>
#include<stdlib.h>
using namespace std;

class Node
{
private:
string name;;
long tel;
public:
Node *next;
Node()
{
}
Node(string n,long t)
{
this->name = n;
this->tel = t;
}
void setName(string name)
{
this->name=name;
}
void setTel(long tel)
{
this->tel = tel;
}
string getName()

{
return this->name;
}
long getTel()
{
return this->tel;
}
};

Node* initialize()
{
Node *head = new Node();
Node *last = new Node();
head->next = last;
last->next=NULL;
last = NULL;
return head;
}
//以下是增加记录的函数
void add(Node *h,string name,long tel )
{
Node *addone = new Node(name,tel);
addone->next = h->next;
h->next = addone;
addone = NULL;
}

//以下是查询函数
Node * seek(Node *h,string name,long tel)//一定要注意此处将头指针作为参数传入,在函数的操作过程中,一定要保证头指针的位置不发生任何改变!
{
Node *result=h;
while(result)
{
if((result->getName()==name)&&(result->getTel()==tel))
{
return result;
}
result = result->next;
}
return result;
}
//当查询的结果存在的时候,返回的result指针应该指向某一个节点,若查询结果不存在,result的指针值应该为NULL。
//以下是一个删除函数,但是目前删除函数依然有问题,发生内存错误
void remove(Node *h,string name,long tel)
{
Node *p,*q;
p = h;
while(p->next != NULL)
{
if((p->next->getName()==name) &&(p->next->getTel()==tel) )
{
break;
}//将指针p定位到要删除节点的前一个节点
else
{
p=p->next;
}
}
q = p->next;
if(q)
{
p->next = q->next;
free(q);
}
if(!seek(h,name,tel))
cout<<"删除成功"<<endl;
else
cout<<"删除失败"<<endl;
}
//以下是对指定位置元素的数据进行修改
void update(Node *h,string name,long tel,string newname,long newtel)
{
Node* row = seek(h,name,tel);
row->setName(newname);
row->setTel(tel);
cout<<"修改过程执行完毕!"<<endl;
row=NULL;
}
int main(void)
{
//主函数的功能只做测试使用,可以根据需要自己定制功能选择菜单。
//下一个版本会在基于文件操作的基础上,使用链表做一个通讯录
Node* head = initialize();
add(head,"stuA",159);
if(seek(head,"stuA",159))
cout<<"查询成功"<<endl;
update(head,"stuA",159,"stuB",135);
remove(head,"stuB",1350);
return 0;
}


由于只是为了检验一下对链表的掌握,所以功能比较简单,但还是具有基本的链表的特点的,仅作参考吧。确实东西不复杂,就是回忆一下有关知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 链表 通讯录
相关文章推荐