コード例 #1
0
void main()
{
	LinkList *L1,*L2,*L3;
	ElemType a[]={'1','3','5'};
	ElemType b[]={'2','4','6','7'};
	InitList(L1);
	InitList(L2);
	InitList(L3);
	CreateListR(L1,a,3);
	printf("L1:");DispList(L1);
	CreateListR(L2,b,4);
	printf("L2:");DispList(L2);
	printf("归并\n");
	UnionList(L1,L2,L3);
	printf("L3:");DispList(L3);
}
コード例 #2
0
int main()
{
	SqList L;
	ElemType e;
	Status i;
	int j,k;
	i = InitList(&L);
	printf("L.length = %d\n\n",L.length);
	for(j=1; j<=5; j++)
		ListInsert(&L,1,j);
	printf("L.data = :");
	ListTraverse(L);
	printf("L.length = %d\n\n",L.length);

	i=ListEmpty(L);
	printf("L 是否空: i=%d(1:是 0:否)\n\n",i);

	ClearList(&L);
	printf("清空 L 后: L.length=%d\n\n",L.length);

	i=ListEmpty(L);
	printf("L 是否空: i=%d(1:是 0:否)\n\n",i);

	for(j=1;j<=10;j++)
		ListInsert(&L,j,j);
	printf("在 L 的表尾依次插入 1-10 后: L.data=");
	ListTraverse(L);
	printf("L.length=%d \n\n",L.length);

	ListInsert(&L,1,0);
	printf("在 L 的表头插入 0 后: L.data=");
	ListTraverse(L);
	printf("L.length=%d \n\n",L.length);

	GetElem(L,5,&e);
	printf("第 5 个元素的值为: %d\n\n",e);
	for(j=3;j<=4;j++)
	{
		k=LocateElem(L,j);
		if(k)
			printf("第%d 个元素的值为%d\n\n",k,j);
		else
			printf("没有值为%d 的元素\n\n",j);
	}

	k=ListLength(L); /* k 为表长 */
	for(j=k+1;j>=k;j--)
	{
		i=ListDelete(&L,j,&e); /* 删除第 j 个数据 */
		if(i==ERROR)
			printf("删除第%d 个数据失败\n\n",j);
		else
			printf("删除第%d 个的元素值为: %d\n\n",j,e);
	}
	printf("依次输出 L 的元素: ");
	ListTraverse(L);

	j=5;
	ListDelete(&L,j,&e); /* 删除第 5 个数据 */
	printf("删除第%d 个的元素值为: %d\n\n",j,e);
	printf("依次输出 L 的元素: ");
	ListTraverse(L);

	//构造一个有 10 个数的 Lb
	SqList Lb;
	i=InitList(&Lb);
	for(j=6;j<=15;j++)
		i=ListInsert(&Lb,1,j);

	UnionList(&L,Lb);
	printf("依次输出合并了 Lb 的 L 的元素: ");
	ListTraverse(L);

	return 0;
}
コード例 #3
0
ファイル: main.c プロジェクト: QingDengKuZhu/SqList
int main(void)
{
	int select;		/*保存选择变量*/
	size_t pos;		/*位序*/
	Elem e;			/*保存从函数返回的结点的值*/
	Elem v;			/*保存传递给函数的结点的值*/
	int n = 1;

	SQLIST L;
	InitList(&L);

	srand((int)time(NULL));
	while (n <= 10)
	{
		
		InsertList(&L, n, rand()%20);
		++n;
	}

	while (1)	/*while_@1*/
	{
		if (!L.elem)
		{
			printf("表不存在!\n");
			break;
		}
		system("cls");
		Menu();

		printf("请输入您的选择(1~10):");
		scanf("%d", &select);
		getchar();

		switch (select)	/*switch_@1*/
		{
		case 1:			/*插入数据*/
			pos = InputPos("插入位置为:");
			e = InputValue("结点元素为:");
			if (FAILE == InsertList(&L, pos, e))
			{
				printf("插入失败!\n");
			}
			else
			{
				printf("插入成功!\n");
			}
			
			getchar();
			break;
		case 2:			/*整表输出*/
			printf("整表为:");
			TraveList(&L);
			
			getchar();
			break;
		case 3:			/*删除结点*/
			pos = InputPos("删除的结点位置是:");
			if (OK == DeleteList(&L, pos, &e))
			{
				printf("删除成功,删除的元素是%d!\n", e);
			}
			else
			{
				printf("删除失败!\n");
			}

			getchar();
			break;

		case 4:			/*输出表的长度*/
			printf("线性表长度: %d \n", ListLength(&L));
			
			getchar();
			break;

		case 5:			/*清空表*/
			ClearList(&L);
			printf("该表已经清空!\n");
			
			getchar();
			break;

		case 6:			/*判断链表是否存在特定结点*/
			v =InputValue("要查找的数值为:");
			printf("要查找的元素在链表的第%d位!(第0位表示不存在)\n", LocateElem(&L, v));

			getchar();
			break;

		case 7:			/*返回特定位序结点*/
			pos = InputPos("获取位置为:");
			if (OK == GetElem(&L, pos, &e))
			{
				printf("该结点为:%d\n", e);
			}
			else
			{
				printf("不存在!\n");
			}

			getchar();	
			break;

		case 8:			/*判断链表*/
			if (ListEmpty(&L) == TRUE)
			{
				printf("表为空!\n");
			}
			else
			{
				printf("表非空!\n");
			}

			getchar();	
			break;
		
		case 9:			/*销毁整表*/
			DestroyList(&L);
			printf("表已删除!\n");

			getchar();	
			break;
		
		case 10:		/*合并链表*/
			{
				SQLIST La;
				size_t i = 0;
				InitList(&La);
				srand((int)time(NULL));
				for (i=1; i<=10; ++i)
				{
					InsertList(&La, i, rand()%15);
				}
				printf("待求并集的表为: ");
				TraveList(&La);
				UnionList(&L, &La);

				DestroyList(&La);/*避免内存泄漏*/
				printf("操作完成!\n");

				getchar();
				break;
			}

		case 11:		/*求前驱结点*/
			v = InputValue("寻找哪个元素的前驱结点: ");
			
			if (OK == PriorELem(&L, v , &e))
			{
				printf("前驱结点元素为: %d", e);
			}
			else
			{
				printf("未找到!\n");
			}

			getchar();
			break;
			
		case 12:	/*求后去结点*/
			v = InputValue("寻找哪个元素的后驱结点: ");
			
			if (OK == NextELem(&L, v , &e))
			{
				printf("后驱结点元素为: %d", e);
			}
			else
			{
				printf("未找到!\n");
			}
			
			getchar();
			break;
			
		default:
			printf("请重新选择!\n");
			
			getchar();
			break;
		}/*switch_@1*/

	}	/*while_@1*/
	
	return EXIT_SUCCESS;
}