⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 操作链表.cpp

📁 1、 用链表实现线性表。其中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -