前言
(1)掌握并熟练运用了c++语言的基本数据类型与各种表达式,程序的流程控制语句;
(2)使用了函数,掌握了函数的定义以及函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握指针变量的作用域与生存期,了解函数的作用域。
(3)熟练掌握线性表的链式存储表示方法的特点,灵活应用适当的存储形式解决具体问题。
(4)理解掌握宏定义及结点类型使用,灵活运用指针变量。
一、什么是带头结点的单链表?其与不带头结点的单链表有何区别?
1.在单链表的首元结点之前增加一个特殊的结点,称为头结点。
2.第一个结点的操作和表中其他结点的操作相一致,无需进行特殊处理;
无论链表是否为空,都有一个头结点,因此空表和非空表的处理也就统一了。
二、使用步骤
1.菜单函数
void DestroyList(LinkNode* L)
{
LinkNode* pre = L, * p = L->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
int main()
{
int minp;
LinkList L;
int len, i, n, t, loc1, e, choice = 0;
int loc2, data2, loc3;
int* ele = &e;
L = (LinkList)malloc(sizeof(LinkNode));
L->next = NULL;
while (1)
{
cout << "*****************************************" << endl;
cout << "1.构造一个带头结点的空链表" << endl;
cout << "2.建立具有n的元素链表" << endl;
cout << "3.链表中元素最小值为:" << endl;
cout << "4.链表中元素最大值为:" << endl;
cout << "5.链表中元素求和:" << endl;
cout << "6.排序输出:" << endl;
cout << "7.逆置输出单链表" << endl;
cout << "8.统计单链表结点的个数" << endl;
cout << "9.查询指定位置的数据" << endl;
cout << "10.在指定位置插入指定元素" << endl;
cout << "11.删除指定位置的数据" << endl;
cout << "12.退出" << endl;
cout << "******************************************" << endl;
cout << "请输入菜单序号:" << endl;
cin >> choice;
2.控制结构
if (choice == 12)
break;
switch (choice)
{
case 1:
InitList(L);
cout << "成功初始化" << endl;
break;
case 2:
cout << "选择要创建链表的方法" << endl;
cout << "1.头插法\t2.尾插法" << endl;
cin >> t;
if (t == 1)
{
int a1[MAXSIZE];
cout << "请输入需要多少个节点" << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "请输入第" << i + 1 << "个节点的数据" << endl;
cin >> a1[i];
}
CreateList_F(L, a1, n);
printf("头插法建立单链表,遍历输出单链表:");
DispList(L);
}
else
{
int a2[MAXSIZE];
cout << "请输入需要多少个节点" << endl