2021-10-20

#include
using namespace std;
#define ElemType int
#define Status int
typedef struct LNode
{
ElemType data;//数据域
struct LNode* next;//指针域

}LNode, * LinkList;
//初始化
LinkList p;//定义头指针
void InitList(LinkList& L)
{
L = new LNode;//生成结点
L->next = NULL;//指针域为空

}
//赋值操作,后插法
int CreateList_R(LinkList& L) {

L = new LNode;//开辟头结点
L->next = NULL;
LinkList r = L;
cout << "请输入表长:" << endl;
int n;
cin >> n;
cout << "输入表中的元素:" << endl;
for (int i = 0; i < n; i++)
{
	p = new LNode;
	cin >> p->data;
	p->next = NULL;
	r->next = p;
	r = p;

}

return 1;

}
//取得值
Status GetElem(LinkList L)
{
cout << “请输入要得到的值的位置:” << endl;
ElemType e;
int i;//数值的位置
cin >> i;
p = L->next;//p为指向首结点的指针
if (!p)//当指针不存在
{
cout << “error!” << endl;
}
for (int j = 1; j < i; j++)
{
p = p->next;
}
e = p->data;
cout << “得到的值为:” << e << endl;
return 1;
}
//插值操作
Status InsertList(LinkList& L)
{
p = L;
cout << “请输入要插入的位置:” << endl;
int n;
cin >> n;
cout << “请输入要插入的值:” << endl;
ElemType e;
cin >> e;
for (int i = 1; i < n; i++)
{
p = p->next;
}
LinkList s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
Status DeleteList(LinkList& L)//删除操作
{
LinkList q;
cout << “请输入你要删除的位置:” << endl;
int i;
cin >> i;
p = L;
for (int n = 1; n < i; n++)
{
p = p->next;
if (!(p->next))
{
cout << “error!” << endl;
return 0;
}

}
q = p->next;
p->next = q->next;
delete q;
return 1;

}

void PrintList(LinkList L)//打印单链表
{
cout << “当前列表中的元素为:” << endl;
p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;

}
//按值查找单链表中的元素
Status LocateElem(LinkList& L)
{
cout << “请输入要查找的元素:” << endl;
ElemType e;
cin >> e;
p = L->next;
int j = 1;
while (p->data != e)
{
p = p->next;
j++;
if (!p)
{
cout << “error!” << endl;
}
}
cout << “该元素在:” << j << endl;
return 1;
}
//两个单链表的合并
void MergeList(LinkList& La, LinkList& Lb)
{
cout << “链表合并:” << endl;
LinkList l = La, m = Lb;
while (l->next != NULL)//遍历到表尾
{
l = l->next;

}
l->next = m->next;

}
void SortList(LinkList& L)
{
cout << “元素降序排序:” << endl;
p = L->next->next;
LinkList q, pre;
L->next->next = NULL;
while §
{
q = p->next;
pre = L;
while (pre->next != NULL && pre->next->data > p->data)
pre = pre->next;
p->next = pre->next;
pre->next = p;
p = q;
}

}
//表长
Status ListLength(LinkList& L)
{
int len = 0;//计算表长
p = L->next;
while §
{
p = p->next;
len++;
}
cout << “表长为:” << len << endl;
return 1;
}
int main()
{
LinkList L, M;
InitList(L);
InitList(M);
cout << “建立第一个链表:” << endl;
CreateList_R(L);
PrintList(L);
InsertList(L);
PrintList(L);
DeleteList(L);
PrintList(L);
GetElem(L);
LocateElem(L);
cout << “建立第二个链表:” << endl;
CreateList_R(M);
PrintList(M);
MergeList(L, M);
PrintList(L);
SortList(L);
PrintList(L);
ListLength(L);
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值