//单链表代码
#include
#include
using namespace std;
//单链表的存储结构
typedef struct LNode
{
int DATE;
LNode *Next;
//结点的数据域
//结点的指针域
}Lnode, *LinkList;
void InitList(LinkList &L)
{
//初始化
L = new LNode;
L->Next = NULL;
}
void Creat_LinkList2(LinkList &L) //尾插法创建单链表
{
L = new LNode;
L->Next = NULL;
LinkList r = new LNode;
r = L;
while (r->Next != NULL)
//尾指针r指向头结点
r = r->Next;
cout << "输入多少个数据" << endl;
int x; cin >> x;
for (int i = 0; i < x; i++)
{
LinkList S;
S = new LNode;//生成新结点
int a; cin >> a;
S->DATE = a; //输人元素值赋给新结点*p的数据域
S->Next = NULL;
r->Next = S; //将新结点*S插人尾结点*r之后
r = S; //r指向新的尾结点*S
}
}
void ListSize(LinkList L)
{
//求单链表长度
LinkList q = L->Next; int i = 0;
while (q != NULL)
{
q = q->Next;
i++;
}
cout << "长度为 " << i << endl;
}
void ListInsert_L(LinkList L, int x)
{
//取元素
int i = 0;
while (i < x&&L != NULL)
{
L = L->Next;
i++;
}
cout << "取出的元素为 " << L->DATE << endl;
}
void ListDelete_L(LinkList &L, int x)
{//在带有头结点的单链表L中,删除第x个元素
//删除
LinkList q;
q = new LNode;
q = L;
int i = 0;
while (i < (x - 1) && q->Next != NULL)//查找第x-1个结点,q指向该结点
{
q = q->Next;
i++;
}
LinkList p;
p = new LNode;
if (i == x - 1 && q->Next != NULL) {
p = q->Next;//临时保存被删结点的地址以备释放
q->Next = p->Next;//改变删除结点的前驱结点的指针域
delete p;//释放删除结点的空间
}
else
}
cout << "输入错误" << endl;
void Listset_L(LinkList &L, int x, int n)
{
//修改元素
int i = 0;
LinkList q;
q = new LNode;
q = L->Next;
LinkList Q;
Q = new LNode;
Q = L;
while (i < x - 1 && q != NULL)
{
Q = q;
q = q->Next;
i++;
}
if (i == x - 1 && Q->Next != NULL)
q->DATE = n;
//实现修改
else
cout << "输入错误" << endl;
}
void Creat_LinkList(LinkList &L, int x, int n)//插入
{
LinkList q;
q = new LNode;
q = L;
int i = 0;
while (i < (x - 1) && q->Next != NULL)
{
q = q->Next;
i++;
}
if (i + 1 == x && x != 0 && q)
{
LinkList p;
p = new LNode;
p->DATE = n;
p->Next = q->Next;
q->Next = p;
}
else
}
cout << "输入错误" << endl;
void Print_LinkList(LinkList L)
{
LinkList S = L->Next;
cout << "数据为 ";
while (S)
{
cout << S->DATE << "
S = S->Next;
";
}
cout << endl;
}
void Duqu(LinkList L)
{
cout << "取出第几个元素" << endl;
int a; cin >> a;
int i = 0;
while (i < a&&L != NULL)
{
L = L->Next; i++;
}
if (i != 0 && L)
cout << "取出的元素为 " << L->DATE << endl;
else
}
cout << "错误" << endl;
void Xiugai(LinkList &L)
{
cout << "修改第几个元素" << endl;
int a; cin >> a;
cout << "修改元素的值" << endl;
int b; cin >> b;
Listset_L(L, a, b);
}
void Charu(LinkList &L)
{
cout << "在哪里插入元素" << endl;
int a; cin >> a;
cout << "插入元素为多少" << endl;
int d; cin >> d;
Creat_LinkList(L, a, d);
}
void Shanchu(LinkList &L)
{
cout << "在哪里删除元素" << endl;
int e; cin >> e;
ListDelete_L(L, e);
}
void Jianli()
{
LinkList L;
InitList(L);
while (1) {
cout << "------------------------------------------" << endl;
cout << "1.输入 2.输出 3.长度 4.读取元素 " << endl;
cout << "5.修改元素 6.插入元素 7.删除元素 8.退出" << endl;
cout << "------------------------------------------" << endl;
cout << "输入你的选择:" << endl;
int i; cin >> i;
switch (i)
{
case 1: Creat_LinkList2(L); break;
case 2: Print_LinkList(L); break;
case 3: ListSize(L); break;
case 4: Duqu(L); break;
case 5: Xiugai(L); break;
case 6: Charu(L); break;
case 7: Shanchu(L); break;
case 8: return;
default:cout << "输入错误,请重试" << endl; break;
}
}
}
void Main()
{
while (1) {
cout << "------------------------------------------" << endl;
cout << "1.建立单链表 2.退出" << endl;
cout << "------------------------------------------" << endl;
cout << "输入你的选择:" << endl;
int i; cin >> i;
switch (i)
{
case 1: Jianli(); break;
case 2: return;
default:cout << "输入错误,请重试" << endl; break;
}
}
}
int main()
{
Main();
}