C++链表的基本操作
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode, *LinkList;
void InitList(LinkList &l);
void Create_head(LinkList &l);
void Create_rear(LinkList &l);
void InsertList(LinkList &l, int i, ElemType e);
int DelList(LinkList &l, int i, ElemType *e);
LNode *Pos(LinkList &l, int i);
void Output(LinkList l);
void Show()
{
cout << "****************链表基本操作******************\n";
cout << " 1. 初始化 2.头插入法创建\n";
cout << " 3. 尾插入法创建 4.插入一个元素\n";
cout << " 5. 删除一个元素 6.查找\n";
cout << " 7. 输出 8.菜单\n";
cout << " 9.退出\n";
cout << "**********************************************\n";
cout << "输入1-9之间的数:" << endl;
}
int main()
{
Show();
LinkList l;
int n;
while (1)
{
cout << "请输入你要操作的元素序号:";
cin >> n;
switch (n)
{
case 1:
{
InitList(l);
break;
}
case 2:
{
cout << "请依次输入数据,并以-1作为结束标记:" << endl;
Create_head(l);
break;
}
case 3:
{
cout << "请依次输入数据,并以-1作为结束标记:" << endl;
Create_rear(l);
break;
}
case 4:
{
int i, n;
cout << "请依次输入你要插入的位置和元素:";
cin >> i >> n;
InsertList(l, i, n);
break;
}
case 5:
{
ElemType e;
int i;
cout << "请输入你要删除的位置:";
cin >> i;
DelList(l, i, &e);
break;
}
case 6:
{
cout << "请输入你要查找的位置:";
int i;
cin >> i;
LNode *p = Pos(l, i);
cout << "该位置的值为:" << p->data << endl;
break;
}
case 7:
{
Output(l);
break;
}
case 8:
{
Show();
break;
}
case 9:
{
exit(0);
break;
}
default:
{
cout << "非法的数字序号!!!" << endl;
}
}
}
return 0;
}
void InitList(LinkList &l)
{
l = new LNode;
l->next = NULL;
}
void Create_rear(LinkList &l)
{
int n;
LNode *p = l;
while (1)
{
cin >> n;
if (n == -1)
break;
LNode *s = new LNode;
s->data = n;
p->next = s;
p = s;
}
p->next = NULL;
}
void Create_head(LinkList &l)
{
int n;
while (1)
{
cin >> n;
if (n == -1)
break;
LNode *s = new LNode;
s->data = n;
s->next = l->next;
l->next = s;
}
}
LNode *Pos(LinkList &l, int i)
{
LNode *p = l;
while (i--)
{
p = p->next;
if (p == NULL)
{
cout << "寻找位置已超过链表长度!!!" << endl;
break;
}
}
return p;
}
int DelList(LinkList &l, int i, ElemType *e)
{
LNode *pre, *r;
int k;
pre = l;
k = 0;
while (pre->next != NULL&&k < i - 1)
{
pre = pre->next;
k++;
}
if (!(pre->next))
{
cout << "删除位置不合理!!!" << endl;
return 0;
}
r = pre->next;
pre->next = r->next;
*e = r->data;
free(r);
return 1;
}
void InsertList(LinkList &l, int i, ElemType e)
{
LNode *p, *s;
p = Pos(l, i - 1);
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
}
void Output(LinkList l)
{
LNode *p;
p = l->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}