#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
typedef int DATA;
struct SNode //定义节点
{
DATA data;
SNode* pNext;
};
class CList //创建一个链表类
{
SNode* m_hHead; //链表初始化
char m_name[20];
public:
CList() //构造函数初始化链表
{
m_hHead = NULL;
}
void Setname(const char* p)
{
strcpy(m_name, p);
}
void AddHead(DATA data) //头部插入
{
SNode* p = new SNode; //创建新的节点
p->data = data; //数据域
p->pNext = m_hHead; //指针域
m_hHead = p; //链表初始头
}
void AddTail(DATA data) //尾插入
{
SNode* pNew = new SNode; //创建新的节点
pNew->data = data; //数据域
pNew->pNext = NULL; //指针域
if (!m_hHead) //没有头节点情况下
{
m_hHead = pNew; //将新创建节点设置为头节点
return;
}
SNode* p = m_hHead; //防止异常
while (p->pNext != NULL) //遍历到最后一个节点
p = p->pNext;
p->pNext = pNew;
}
int Delete(DATA data) //删除节点
{
SNode* p = m_hHead, *p1 = NULL;//*p1用来记录前一个节点地址
if (!p)
return 0;
if (p->data == data) //当要删除节点为头节点的情况
{
m_hHead = p->pNext;
free(p);
return 1;
}
while (p)
{
if (p->data == data)
{
p1->pNext = p->pNext;
free(p);
return 1;
}
p1 = p;
p = p->pNext;
}
}
void Print() //打印节点
{
cout << m_name << endl;
SNode* p = m_hHead;
while (p)
{
cout << p->data << endl;
p = p->pNext;
}
}
void Modify(DATA data, DATA newData)//修改某处节点
{
SNode* p = m_hHead;
while (p)
{
if (p->data == data)
p->data = newData;
p = p->pNext;
}
}
int Find(DATA data) //查找节点
{
SNode*p = m_hHead;
int i = 0; //用于返回当前节点查找到的位置
while (p)
{
if (p->data == data)
return i + 1;//代表成功,返回的位置
p = p->pNext;
++i;
}
return -1;//代表失败
}
int GETLIST() //返回节点总数量
{
SNode* p = m_hHead;
int i = 0;
while (p)
{
i++;
}
return i;
}
};
int main()
{
CList A,B;
A.Setname("LIST1: ");
A.AddHead(10);
A.AddHead(9);
A.AddHead(8);
A.AddHead(7);
A.AddHead(6);
A.AddHead(5);
B.Setname("LIST2: ");
B.AddHead(4);
B.AddHead(3);
B.AddHead(2);
B.AddHead(1);
B.AddHead(0);
A.Print();
B.Print();
system("pause");
return 0;
}