📄 操作链表.cpp
字号:
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_3() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
//scanf("%d",&j);
ListTraverse(L,visit);
if (j<1 || j>ListLength(L))
printf(" 超过元素查找范围,请重新操作. \n");
else
{
GetElem(L,j,e);
printf("第%d个元素的值为:%d\n",j,e);
}
break ;
case '1':
printf("请输入你要查找的元素的值:(q退回)");
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_3() ;
exit(0) ;
}
if (!isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
printf("\n");
k=LocateElem(L,j,comp);
ListTraverse(L,visit);
if(k)
printf("第%d个元素的值为: %d\n",k,j);
else
printf("没有值为%d的元素\n",j);
break ;
default:
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
}
void play_4()
{
cout << " 请选择删除元素的方式:0. 元素位置 1. 元素的值 (q退回): " ;
cin >> c ;
if (c == 'q'||c == 'Q')
{
play() ;
exit(0) ;
}
switch (c)
{
case '0':
{
printf("请输入你要删除的第几个元素的(1~~%d)(q退回):: ",ListLength(L) );
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_4() ;
exit(0) ;
}
if ( !isdigit(c) )//(c >='A'&&c<='Z')||(c >='a'&&c<='z')
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
ListTraverse(L,visit);
j = atoi(c_digit) ;
//scanf("%d",&j);
i=ListDelete(L,j,e); // 删除第j个数据
if(i==ERROR)
printf("删除第%d个数据失败\n",j);
else
{
printf("删除第%d个元素为:%d !删除成功!\n",j,e);
ListTraverse(L,visit);
}
}
break ;
case '1':
{
printf("请输入你要删除元素的值(q退回): " );
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_4() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
ListTraverse(L,visit);
j = atoi(c_digit) ;
//scanf("%d",&j);
k=LocateElem(L,j,comp);
if(k != 0)
{
i=ListDelete(L,k,e); // 删除第k个数据
if(i==ERROR)
printf("删除第%d个数据失败\n",j);
else
{
printf("删除第%d个元素值为:%d !删除成功!\n",k,e);
ListTraverse(L,visit);
}
}
else
printf("删除数据失败,链表中没有值为%d的元素\n",k);
}
break ;
default:
printf(" \n 您的输入有误,请重新输入选择 !\n");
}
}
void play_5()
{
cout << " 请选择查找元素前驱的方式:0. 元素位置 1. 元素的值(q退回): " ;
cin >> c ;
if (c == 'q'||c == 'Q')
{
play() ;
exit(0) ;
}
switch (c)
{
case '0':
printf("请输入你要查找的第几个元素的前驱(1~~%d),(q退回): ",ListLength(L) );
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_5() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
//scanf("%d",&j);
if(j <= 1)
printf("第%d元素无前驱\n",j);
else
{
GetElem(L,j,e0); // 把第j个数据赋给e0
i=PriorElem(L,e0,e); // 求e0的前驱
if (i == 1)
printf("第%d元素的前驱为:%d\n",j,e);
else
printf("第%d元素无前驱\n",j);
}
ListTraverse(L,visit);
break ;
case '1':
printf("请输入你要查找值为?元素的前驱 (q退回): ");
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_5() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
//scanf("%d",&j);
k=LocateElem(L,j,comp);
if (k)
{
i=PriorElem(L,j,e); // 求e0的前驱
if (i == 1)
printf("元素为%d的前驱为:%d\n",j,e);
else
printf("值为%d元素无前驱\n",j);
}
else
printf("没有值为%d的元素\n",j);
ListTraverse(L,visit);
break ;
default:
printf(" \n 您的输入有误,请重新输入选择 !\n");
}
}
void play_6()
{
cout << " 请选择查找元素后继的方式:0. 元素位置 1. 元素的值(q退回): " ;
cin >> c ;
if (c == 'q'||c == 'Q')
{
play() ;
exit(0) ;
}
switch (c)
{
case '0':
printf("请输入你要查找第几个元素的后继(1~~%d)(q退回): ",ListLength(L) );
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_6() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
//scanf("%d",&j);
if(j <= ListLength(L) && j >= 1)
{
GetElem(L,j,e0); // 把第j个数据赋给e0
i=NextElem(L,e0,e); // 求e0的后继
if (i == 1)
printf("元素%d的后继为:%d\n",e0,e);
else
printf("第%d元素无后继\n",j);
}
else
printf("第%d元素无后继\n",j);
ListTraverse(L,visit);
break ;
case '1':
printf("请输入你要查找值为?元素的后继(q退回): ");
cin >> c_digit ;
c = c_digit[0] ;
if (c == 'q'||c == 'Q')
{
play_6() ;
exit(0) ;
}
if ( !isdigit(c) )
{
printf(" \n 您的输入有误,请重新输入选择 !\n");
break ;
}
j = atoi(c_digit) ;
//scanf("%d",&j);
k=LocateElem(L,j,comp);
if (k)
{
i=NextElem(L,j,e); // 求e0的后继
if (i == 1)
printf("元素为%d的后继为:%d\n",j,e);
else
printf("值为%d元素无后继\n",j);
}
else
printf("没有值为%d的元素\n",j);
ListTraverse(L,visit);
break ;
default:
printf(" \n 您的输入有误,请重新输入选择 !\n");
}
}
int play()
{
menu() ;
do{
//cin.get(c);
cin >> c ;
if (c!='1' && Init_flag!=1 && c!='8')
{
printf("链表尚未初始化,请先选择 1. 初始化链表!!! \n");
system("pause");
menu() ;
}
else
break ;
}while(c!='1' && Init_flag!=1 && c!='8') ;
switch (c)
{
case '0':
ListTraverse(L,visit) ;
break ;
case '1':
i=InitList(L);
printf("\n链表初始化成功(空链表)!!! \n ");
ListTraverse(L,visit); // 依次对元素调用visit(),输出元素的值
Init_flag = 1 ;
break ;
case '2':
play_2() ;
break ;
case '3':
play_3() ;
break ;
case '4':
play_4() ;
break ;
case '5':
play_5() ;
break ;
case '6':
play_6() ;
break ;
case '7':
printf(" 你确定进行销毁链表L了吗?确定请按y,其它任意键退回:");
cin >> c ;
if ( c!='y'&&c!='Y' )
{
printf(" 返回成功 !");
//system("pause");
break ;
}
printf(" 进行销毁L !");
DestroyList(L);
printf(" \n 销毁L后:L=%u\n",L);
i=InitList(L) ;
break ;
case '8':
say_goodbye() ;
return 0 ;
//exit (1);
break ;
default:
printf(" \n 您的输入有误,请重新输入选择 !\n");
}
system("pause");
//getch();
play() ;
//return 0 ;
}
void say_goodbye()
{
system("cls");
system("color 74");
cout << "\n\n\n" ;
cout<<" ┌─────────────────────────┐\n"
<<" │ !!! GOODBYE,BYE-BYE !!! │\n"
<<" ├────────────┬────────────┤\n"
<<" │ !!! 该程序由黄俊坤独立完成 !!! │\n"
<<" │ !!!软件工程(三)班!!! │\n"
<<" │ !!! 学号06065072 !!! │\n"
<<" │ !!! 谢谢 !!! │\n"
<<" └────────────┴────────────┘\n";
//getch() ;
//system("cls");
cout << "\n !!! GOODBYE,BYE-BYE !!! \n\n" ;
cin.ignore(100,'\n') ;
//string str ;
//getline(cin,str) ;
system("pause");
//exit (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -