/*------------------------------------------------------*/ 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()
/*{{{ 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); }