#include <iostream>
//不带头结点的链表的C++实现;
using namespace std;
typedef int DATA;
struct SNode
{
DATA data;
SNode* pNext;
};
struct SList
{
SNode* m_pHead;
SList()
{
m_pHead = NULL;//空链表;不带头结点;
}
~SList()
{//析构函数对本类内的普通变量不需要清理,而是清理申请过得堆空间
SNode* p = m_pHead, *p1;
while (p)
{
p1 = p;
p = p->pNext;
delete p1;
}
}
void AddHead(DATA d)//头插法 添加节点
{
SNode* p = new SNode;
p->data = d;
p->pNext = m_pHead;
m_pHead = p;
}
int GetCount()//获得节点数目
{
int i = 0;
SNode *p = m_pHead;
while(p)
{
i++;
p=p->pNext;
}
return i;
}
void Delete()//删除节点
{
SNode*p = m_pHead;
m_pHead = m_pHead->pNext;
delete p;
}
void print()//打印链表数据
{
SNode *p = m_pHead;
while (p)
{
cout<<p->data<<endl;
p = p->pNext;
}
}
};
int main()
{
SList list1,list2;
while (true)
{
cout<<"请输入一个数据:"<<endl;
DATA d;
cin>>d;
cout<<"请输入存入的链表:(1 or 2)"<<endl;
int i = 0;
cin>>i;
if (i == 0)
{
break;
}
if (i == 1)
{
list1.AddHead(d);
}
if (i == 2)
{
list2.AddHead(d);
}
cout<<"list1中的个数为:"<<list1.GetCount()<<endl;
cout<<"list2中的个数为:"<<list2.GetCount()<<endl;
}
list1.Delete();
list1.Delete();
list1.print();
return 0;
}
不带头结点的链表头插法C++实现
最新推荐文章于 2023-08-26 15:15:06 发布