/*------------------------------------------------------*/
int main(void) {
	SqList L;
	char getChoose;
	int choose = 1;

	/*char *p;
	scanf_s("%s", p);*/
	
	while (choose) {
		char key;
		printf("是否需要对文件进行操作? Y or N\n");
		key = getchar();
		getchar();
		if (key == 'Y' || key == 'y')
			key1 = 1;
		else
			key1 = 0;

		int op = 1, i = 0;
		ElemType cur_e = 0, prev_e = 0, next_e = 0, e = 0;
		while (op) {
			system("cls");
			printf("\n\n");
			printf("      Menu for Linear Table On Sequence Structure \n");
			printf("------------------------------------------------------\n");
			printf("    	  1. IntiaList       7. LocateElem\n");
			printf("    	  2. DestroyList     8. PriorElem\n");
			printf("    	  3. ClearList       9. NextElem \n");
			printf("    	  4. ListEmpty      10. ListInsert\n");
			printf("    	  5. ListLength     11. ListDelete\n");
			printf("    	  6. GetElem        12. ListTrabverse\n");
			printf("    	  0. Exit\n");
			printf("------------------------------------------------------\n");
			printf("    请选择你的操作[0~12]:");
			scanf_s("%d", &op);
			switch (op) {
			case 1:
				//printf("\n----IntiaList功能待实现!\n");
				if (key1)
				{
					if (IntiaList_file(L) == OK)
					{
						printf("文件加载创建成功!\n");
						if (!L.elem)
							printf("线性表创建失败\n");
						else
						{
							printf("线性表创建成功\n");
						}
					}
					else 
						printf("文件加载失败!\n");
					getchar(); getchar();
					break;
				}
				else
				{
					if (IntiaList(L) == OK) printf("线性表创建成功!\n");
					else printf("线性表创建失败!\n");
					getchar(); getchar();
					break;
				}
			case 2:
				//printf("\n----DestroyList功能待实现!\n");
				if (DestroyList(L) == OK)
					printf("线性表销毁成功!\n");
				else
					printf("线性表销毁失败!\n");
				getchar(); getchar();
				break;
			case 3:
				if (ClearList(L) == OK)
					printf("线性表清空成功!\n");
				//printf("\n----ClearList功能待实现!\n");
				else
					printf("线性表清空失败!\n");
				getchar(); getchar();
				break;
			case 4:
				//printf("\n----ListEmpty功能待实现!\n");
				if (ListEmpty(L) == OK)
					printf("线性表为空!\n");
				else
					printf("线性表不为空!\n");
				getchar(); getchar();
				break;
			case 5:
				//printf("\n----ListLength功能待实现!\n");
				printf("线性表的长度为%d\n", ListLength(L));
				getchar(); getchar();
				break;
			case 6:
				//printf("\n----GetElem功能待实现!\n");
				getchar();
				printf("请输入线性表需要查询的位置的下标:\n");
				scanf_s("%d", &i);
				getchar();
				if (GetElem(L, i, e) == OK)
				{
					printf("查询成功!\n");
					printf("查询结果为%d\n", e);
				}
				else
					printf("查询失败!\n");
				getchar();
				break;
			case 7:
				getchar();
				//printf("\n----LocateElem功能待实现!\n");
				printf("请输入要查询的数:\n");
				scanf_s("%d", &i);
				if (LocateElem(L, i) == OK)
					printf("查询成功!\n");
				else
					printf("查询失败!\n");
				getchar(); getchar();
				break;
			case 8:
				//printf("\n----PriorElem功能待实现!\n");
				getchar();
				printf("请输入你想要查询前一个数的当前数:\n");
				scanf_s("%d", &cur_e);
				getchar();
				if (PriorElem(L, cur_e, prev_e) == OK)
					printf("查询结果为:%d\n", prev_e);
				else
					printf("查询失败!\n");
				getchar();
				break;
			case 9:
				//printf("\n----NextElem功能待实现!\n");
				getchar();
				printf("请输入你想要查询前一个数的当前数:\n");
				scanf_s("%d", &cur_e);
				if (NextElem(L, cur_e, next_e) == OK)
					printf("查询结果为:%d\n", next_e);
				else
					printf("查询失败!\n");
				getchar(); getchar();
				break;
			case 10:
				//printf("\n----ListInsert功能待实现!\n");
				getchar();
				printf("请输入你想要插入的数据:\n");
				scanf_s("%d", &e);
				printf("请输入你想要插入数据的位置:\n");
				scanf_s("%d", &i);
				int h;
				h = ListInsert(L, i, e);
				if (h == OK)
					printf("插入成功!\n");
				else if (h == ERROR)
					printf("插入失败!\n");
				else
					printf("分配空间失败\n");
				getchar(); getchar();
				break;
			case 11:
				getchar();
				//printf("\n----ListDelete功能待实现!\n");
				printf("请输入你想要删除的数的位置:\n");
				int i11;
				scanf_s("%d", &i11);
				if (ListDelete(L, i11, e) == OK)
				{
					printf("删除成功!\n删除的数字为%d\n", e);
				}
				else
					printf("删除失败!\n");
				getchar();
				getchar();
				break;
			case 12:
				//printf("\n----ListTrabverse功能待实现!\n");
				if (L.length == 0)
					printf("线性表为空表\n");
				if (ListTrabverse(L) == ERROR) printf("线性表未初始化!\n");
				getchar(); getchar();
				break;
			case 0:
				printf("是否需要保持数据?Y or N\n");
				getchar();
				char save_or_not;

				save_or_not = getchar();
				getchar();
				if (save_or_not == 'Y' || save_or_not == 'y')
				{
					if (saveFile(L) == OK)
						printf("保存成功!\n");
					else
						printf("保存失败!\n");
				}
				break;
			}//end of switch
		}//end of while
		printf("是否继续使用此系统?Y or N\n");
		getChoose = getchar();
		getchar();
		if (getChoose == 'N' || getChoose == 'n')
			break;
	}

	printf("欢迎下次再使用本系统!\n");
	return 0;
}//end of main()
示例#2
0
/*{{{  data*/
void ReadDataDistanceMatrix(value** points, FILE* inputFile, int k) {
	List tempList;

	size_t lineSize = 0;

	char* lineBuff = NULL;
	char* temp;
	char delims[5] = "\t ,\n";
	char* token = NULL;
	int num = 0;
	int i;
	int line = 0;

	dm = malloc(sizeof(datadistanceMatrix));
	dm->data=NULL;
	dm->dataDist=NULL;
	dm->dataNum=0;
	dm->queries=NULL;
	dm->iterator=0;
	dm->queryDist=NULL;
	dm->queryNum=0;
	dm->qIterator=0;
	dm->k = k;
	getline(&lineBuff, &lineSize, inputFile);
	/*skip the first value*/
	token = strtok(lineBuff, delims);

	InitList(&tempList, BUFFSIZE * sizeof(char), NULL, NULL,NULL);
	
	while (token != NULL) {
		token = strtok(NULL, delims);
		if (token == NULL)
			break;
		temp = malloc((LABELSIZE + 1) * sizeof(char));
		memcpy(temp, token, strlen(token));
		temp[strlen(token)] = '\0';
		InsertValueList(tempList, temp);
		num++;
		free(temp);
	}

	SetDataSize(num);
	*points = malloc(num*sizeof(value));
	value* newData = *points;

	char* tempVal = GetFirst(tempList);
	for (i = 0; i < num; i++) {
		newData[i].name = malloc(LABELSIZE * sizeof(char));
		memset(newData[i].name,'\0',LABELSIZE);
		if(tempVal ==NULL)
			continue;
		strcpy(newData[i].name, tempVal);
		tempVal=GetNext(tempList);
	}

	dm->dataDist = malloc(num * sizeof(double*));
	while (getline(&lineBuff, &lineSize, inputFile) != -1) {

		dm->dataDist[line] = malloc(num * sizeof(double));
		newData[line].content=malloc(sizeof(int));
		memcpy(newData[line].content,&line,sizeof(int));


		token = strtok(lineBuff, delims);
		if (token == NULL)
			break;
		for (i = 0; i < num; i++) {
			dm->dataDist[line][i] = atoi(token);
			token = strtok(NULL, delims);
		}
		line++;
	}
	dm->dataNum=line;
	data.tableSize = dm->dataNum;
	DestroyList(&tempList);

	free(lineBuff);


}