#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct List
{
int n;
List *pre;
List *pNext;
};
List *p=NULL;
bool isEmpty()
{
return p==NULL;
}
int clear()
{
List *pstr=p;
while(p)
{
p=p->pNext;
delete pstr;
pstr=p;
}
return 1;
}
int Inset(int n)
{
List *pstr=new List();
pstr->n=n;
pstr->pre=NULL;
pstr->pNext=p;
if(p)
p->pre=pstr;
p=pstr;
return 1;
}
bool Find(int n)
{
List *pstr=p;
while(pstr)
{
if(pstr->n==n)
{
return true;
}
pstr=pstr->pNext;
}
return false;
}
bool Del(int n)
{
List *pstr=p;
while(pstr)
{
if(pstr->n==n)//如果找到了
{
if(pstr->pre)//(处理它的上一个节点)如果有前一个节点
pstr->pre->pNext=pstr->pNext;
else//如果没有上一个节点,则他就是头结点
{
p=pstr->pNext;
}
if(pstr->pNext)//(处理它的下一个节点 ) 如果有下一个节点
pstr->pNext->pre=pstr->pre;
delete pstr;//释放空间
return true;
}
}
}
int main()
{
for(int i=1;i<=10;i++)
{
Inset(i);
}
cout<<"输入要查找的数:";
int n;
cin>>n;
if(Find(n))
{
cout<<"Yes"<<endl;
}
if(!Find(n))
cout<<"No"<<endl;
while(!isEmpty())
{
cout<<p->n<<endl;
Del(p->n);
}
clear();
return 0;
}
双向链表
最新推荐文章于 2024-09-13 11:50:55 发布