#include <iostream>
using namespace std;
typedef struct NODE
{
int i;
struct NODE *next;
}no;
no* Insert(no *header) //向链表中插入数据,并将链表以升序排列
{
int m;
cout<<"请输入数据(输入0退出):"<<endl;
cin>>m;
no *p = NULL;
p = header;
do
{
p = header;
no *q = new no;
q->i = m;
q->next = NULL;
while((p->next!=NULL)&&(((p->next)->i)<(q->i)))
{
p = p->next;
}
q->next = p->next;
p->next = q;
cout<<"请输入数据(输入0退出):"<<endl;
cin>>m;
}while(m!=0);
return header;
}
void Print(no *header)//将链表中的所有数据输出
{
no *p=NULL;
p = header;
if(p->next==NULL)
{
cout<<"没有数据要输出。"<<endl;
}
else
{
while(p->next!=NULL)
{
cout<<((p->next)->i)<<endl;
p = p->next;
}
cout<<"所有数据已输出。"<<endl;
}
}
no* Delete(no*header) //删除表中的某些数据
{
cout<<"请输入想要删除的数据。"<<endl;
int n;
cin>>n;
no *p=NULL;
p = header;
bool have = false;
while(p->next!=NULL)
{
if(p->next->i==n)
{
no *q = NULL;
q = p->next;
p->next = q->next;
delete q;
have = true;
}
else
p = p->next;
}
if(!have)
cout<<"对不起没有找到相关数据!"<<endl;
return header;
}
void Exit(no* header)//将链表中数据清空
{
no* p = NULL;
no *q = NULL;
p = header;
while(p->next!=NULL)
{
q = p->next;
delete p;
p = q;
}
delete q;
}
void Previous(no*header)
{
cout<<"请输入您想查找的数据:"<<endl;
int n;
cin>>n;
no *p=NULL;
p = header;
bool have = false;
if(header->next->i==n)
{
cout<<"对不起,您所输入的数据没有前驱。"<<endl;
have = true;
}
else{
while(p->next!=NULL)
{
if(p->next->i==n)
{
cout<<"输入数据的前驱是:"<<p->i<<endl;
have = true;
break;
}
else
p = p->next;
}
}
if(!have)
cout<<"对不起没有找到相关数据!"<<endl;
}
void Next(no* header)
{
cout<<"请输入您想查找的数据:"<<endl;
int n;
cin>>n;
no *p=NULL;
p = header;
bool have = false;
while(p->next!=NULL)
{
if(p->i==n)
{
cout<<"输入数据的后继是:"<<p->next->i<<endl;
have = true;
break;
}
else
p = p->next;
}
if(p->i==n)
{
cout<<"对不起,您输入的数据无后继。"<<endl;
have = true;
}
if(!have)
cout<<"对不起没有找到相关数据!"<<endl;
}
void Frist(no* header)
{
if(header->next!=NULL)
{
cout<<"此链表中第一个数据是:"<<header->next->i<<endl;
}
else
{
cout<<"这事一个空表。"<<endl;
}
}
void End(no*header)
{
no *p=NULL;
p = header;
if(p->next==NULL)
{
cout<<"这是一个空表。"<<endl;
}
else
{
while(p->next!=NULL)
{
p = p->next;
}
cout<<"最后一个元素是:"<<p->i<<endl;
}
}
int main()
{
no *header = new no;
header->next = NULL;
int n;
do{
cout<<"*****************************************************************************"<<endl;
cout<<"** 1.向链表中添加新的数据(表中数据按升序排列) **"<<endl;
cout<<"** 2.输出链表中的数据 **"<<endl;
cout<<"** 3.删除链表中的某一数据 **"<<endl;
cout<<"** 4.输出输入数据的前驱 **"<<endl;
cout<<"** 5.输出数据的后继元素 **"<<endl;
cout<<"** 6.输出数据的第一个元素 **"<<endl;
cout<<"** 7.输出链表的最后一个元素 **"<<endl;
cout<<"** 8.释放内存退出程序 **"<<endl;
cout<<"** 请选择(1~8) **"<<endl;
cout<<"*****************************************************************************"<<endl;
cout<<"作者: 张晓敏 学校:哈尔滨工业大学 "<<endl;
cin>>n;
switch(n)
{
case 1:
header = Insert(header);
break;
case 2:
Print(header);
break;
case 3:
header = Delete(header);
break;
case 4:
Previous(header);
break;
case 5:
Next(header);
break;
case 6:
Frist(header);
break;
case 7:
End(header);
break;
case 8:
Exit(header);
break;
default:
cout<<"输入错误,请输入1~8!"<<endl;
break;
}
}while(n!=8);
return 0;
}
老师们总是说多写点注释语句,可是我的注释语句不知道咋写,学C和C++也有一年了,想想水平还是有所提高的,大家有什么好的建议欢迎提出来啊。