//main.cpp
#include <iostream>
#include "singleLinkList.h"
using namespace std;
int main(int argc,char * argv[])
{
SingleLink sl;
int value;
int i;
cout<<"\t\t\t\t\t单链表\n";
while(1)
{
cout<<"********************************************************************************";
cout<<"\t\t\t\t1添加元素\n\t\t\t\t2遍历链表\n\t\t\t\t3查找记录\n\t\t\t\t4插入元素\n\t\t\t\t5删除元素\n\t\t\t\t6清屏\n\t\t\t\t7退出\n";
cout<<"********************************************************************************";
value = sl.GetValue();
switch(value)
{
case 1:
cout<<"\t\t\t1头插法建立单链表\n\t\t\t2尾插法建立单链表\n";
i = sl.GetValue();
if(i==1)
{
if(sl.AddNodeOne())
cout<<"元素添加成功!\n";
else
cout<<"未能成功添加元素!\n";
}
else if(i==2)
{
if(sl.AddNodeTwo())
cout<<"元素添加成功!\n";
else
cout<<"未能成功添加元素!\n";
}
else
{
printf("输入格式错误!\n");
}
break;
case 2:
//sl.TraverseList();
cout<<sl;
break;
case 3:
sl.FindValue();
break;
case 4:
if(sl.InsertValue())
cout<<"元素插入成功!\n";
break;
case 5:
if(sl.DeleteValue())
cout<<"元素删除成功!\n";
break;
case 6:
system("cls");
break;
case 7:
exit(1);
break;
default:
cout<<"输入有误,从新输入!\n";
break;
}
}
return 0;
}
//singleLinkList.cpp
#include "singleLinkList.h"
using namespace std;
SingleLink::SingleLink()
{
m_phead = NULL;
m_count = 0;
}
SingleLink::~SingleLink()
{
}
bool SingleLink::AddNodeOne()
{
LinkNode * pnode = new LinkNode();
if(pnode == NULL)
return false;
int value = GetValue();
if(m_phead == NULL)
{
pnode->SetNode(value,NULL);
}
else
{
pnode->SetNode(value,m_phead);
}
m_phead = pnode;
m_count++;
return true;
}
bool SingleLink::AddNodeTwo()
{
LinkNode * pnode = new LinkNode();
if(pnode == NULL)
return false;
int value = GetValue();
if(m_phead == NULL)
{
m_phead = pnode;
}
else
{
LinkNode * ptail = m_phead;
while(ptail->GetPData() != NULL)
{
ptail = ptail->GetPData();
}
ptail->SetPData(pnode);
}
pnode->SetNode(value,NULL);
m_count++;
return true;
}
void SingleLink::TraverseList()const
{
if(m_phead == NULL)
{
cout<<"链表为空!\n";
return;
}
LinkNode * pcurrent = m_phead;
cout<<*pcurrent;
while(pcurrent->GetPData() != NULL)
{
pcurrent = pcurrent->GetPData();
cout<<*pcurrent;
}
cout<<endl;
cout<<"元素总数为:"<<m_count<<endl;
}
bool SingleLink::FindValue()const
{
int i = GetValue();
int p=1;
if(m_phead == NULL)
{
cout<<"链表为空!\n";
return false;
}
LinkNode * pcurrent = m_phead;
if(pcurrent->GetData() == i)
{
cout<<"该元素在链表中的位置为:"<<p<<endl;
return true;
}
while(pcurrent->GetPData() != NULL)
{
pcurrent = pcurrent->GetPData();
p++;
if(pcurrent->GetData() == i)
{
cout<<"该元素在链表中的位置为:"<<p<<endl;
return true;
}
}
cout<<"单链表中无此元素!\n";
return false;
}
bool SingleLink::InsertValue()
{
int value = GetValue();
int position;
cout<<"在何处插入该元素:\n";
bool b = true;
while(b)
{
if(!(cin>>position))
{
cout<<"位置参数错误,请重新输入:\n";
cin.clear();
}
else
{
b = false;
}
while(cin.get() != '\n')
continue;
}
LinkNode * pcurrent = m_phead;
int count=1;
while(position != count && pcurrent->GetPData() != NULL)
{
count++;
pcurrent = pcurrent->GetPData();
}
if(count == position)
{
if(count == 1)
{
LinkNode * pnode = new LinkNode;
pnode->SetNode(value,m_phead);
m_phead = pnode;
m_count++;
}
else
{
LinkNode * pcurrent2 = m_phead;
while(pcurrent2->GetPData() != pcurrent)
pcurrent2 = pcurrent2->GetPData();
LinkNode * pnode = new LinkNode;
pnode->SetNode(value,pcurrent);
pcurrent2->SetPData(pnode);
m_count++;
}
return true;
}
if(pcurrent->GetPData() == NULL)
{
cout<<"您输入的位置不正确!\n";
return false;
}
return false;
}
bool SingleLink::DeleteValue()
{
int position;
cout<<"输入你要删除元素的位置:\n";
bool b = true;
while(b)
{
if(!(cin>>position))
{
cout<<"位置参数错误,请重新输入:\n";
cin.clear();
}
else
{
b = false;
}
while(cin.get() != '\n')
continue;
}
LinkNode * pcurrent = m_phead;
int count=1;
while(position != count && pcurrent->GetPData() != NULL)
{
count++;
pcurrent = pcurrent->GetPData();
}
if(position == count)
{
if(count == 1)
{
LinkNode * pcurrent2 = m_phead;
m_phead = m_phead->GetPData();
delete pcurrent2;
m_count--;
}
else
{
LinkNode * pcurrent2 = m_phead;
while(pcurrent2->GetPData() != pcurrent)
pcurrent2 = pcurrent2->GetPData();
pcurrent2->SetPData(pcurrent->GetPData());
delete pcurrent;
m_count--;
}
return true;
}
if(pcurrent->GetPData() == NULL)
{
cout<<"您输入的位置不正确!\n";
return false;
}
return false;
}
int SingleLink::GetValue()const
{
int value;
bool b = true;
cout<<"请输入你的值:\n";
while(b)
{
if(!(cin>>value))
{
cout<<"你的输入有误,请重新输入:\n";
cin.clear();
}
else
{
b = false;
}
while(cin.get() != '\n')
continue;
}
return value;
}
//singleLinkList.h
#ifndef SINGLELINKLIST_H_
#define SINGLELINKLIST_H_
#include "linkNode.h"
#include <iostream>
class SingleLink
{
private:
LinkNode * m_phead;
int m_count;
public:
SingleLink();
~SingleLink();
bool AddNodeOne();
bool AddNodeTwo();
bool InsertValue();
bool DeleteValue();
void TraverseList()const;
friend std::ostream & operator<<(std::ostream & os,const SingleLink & sl){sl.TraverseList();return os;};
bool FindValue()const;
int GetValue()const;
};
#endif
//linkNode.h
#ifndef LINKNODE_H_
#define LINKNODE_H_
#include <iostream>
class LinkNode
{
private:
int m_data;
LinkNode * m_pdata;
public:
LinkNode();
void SetNode(int data,LinkNode * pdata);
friend std::ostream & operator<<(std::ostream & os,const LinkNode & linknode);
LinkNode * GetPData(){return m_pdata;};
int GetData(){return m_data;};
void SetPData(LinkNode * linkNode){m_pdata = linkNode;};
void SetData(int value){m_data = value;};
};
#endif
//linkNode.cpp
#include "linkNode.h"
LinkNode::LinkNode()
{
m_data = 0;
m_pdata = NULL;
}
void LinkNode::SetNode(int data,LinkNode * pdata)
{
m_data = data;
m_pdata = pdata;
}
std::ostream & operator<<(std::ostream & os,const LinkNode & linknode)
{
std::cout<<linknode.m_data<<" ";
return os;
}
单链表(c++)
最新推荐文章于 2019-09-01 13:41:00 发布