資料結構第四天
阿新 • • 發佈:2018-12-10
一、對通訊錄新增功能
1、遇到重名的資訊,可以根據id刪除
2、新增退出功能。
3、輸入id時提供id是否重複的功能
以下為改進的程式碼
#include <stdio.h> #include "Linklist.h" #include <stdlib.h> #include <string.h> enum {ADD = 1,INFORMATION,FIND,DELETE}; //功能選項 enum {BACK,ID,PHONE,CONPANY,NAME}; //新增選項 void Menu(); //主選單 void Menu_add(); //新增資訊選單 void Menu_search(); //查詢選單 void Menu_delete(); //刪除選單 void Func(List *ls,int k); //功能選擇 void Add(List *ls); //新增資訊 void Search(List *ls,int i); //查詢資訊 void Delete(List *ls,int i); //刪除資訊 BOOL array(List *ls); //排列資訊 int main() { List *ls = Creat(); //建立連結串列 while(1) { system("clear"); Menu(); int k; //功能選項 scanf("%d",&k); Func(ls,k); } return 0; } //選單模組 void Menu() { printf("---------------------------------------------------\n"); printf("\t\t1、新增好友資訊\n"); printf("\t\t2、全部好友資訊\n"); printf("\t\t3、搜尋好友\n"); printf("\t\t4、刪除好友\n"); printf("----------------------------------------------------\n"); } void Menu_add() { printf("*****************************************************\n"); printf("\t\t1、新增ID號\n"); printf("\t\t2、新增手機號碼\n"); printf("\t\t3、新增公司電話\n"); printf("\t\t4、新增姓名\n"); printf("\t\t0、請按0返回上一個選單\n"); printf("****************************************************\n"); } void Menu_search() { printf("****************************************************\n"); printf("\t\t1、根據ID號查詢\n"); printf("\t\t2、根據手機號碼查詢\n"); printf("\t\t3、根據公司電話查詢\n"); printf("\t\t4、根據姓名查詢\n"); printf("\t\t0、請按0返回上一個選單\n"); printf("***************************************************\n"); } void Menu_delete() { printf("**************************************************\n"); printf("\t\t1、根據ID號刪除\n"); printf("\t\t2、根據手機號碼刪除\n"); printf("\t\t3、根據公司電話刪除\n"); printf("\t\t4、根據姓名刪除\n"); printf("\t\t0、請按0返回上一個選單\n"); printf("**************************************************\n"); } //功能選擇模組 void Func(List *ls,int k) { int j = 1; //用於退出顯示部分 switch(k) { case ADD: system("clear"); Menu_add(); Add(ls); break; case INFORMATION: system("clear"); if(NULL == ls->head->next) printf("拒絕肥宅,廣交好友!!!\n"); else Display(ls); while(1) { printf("請按0退出\n"); scanf("%d",&j); if(0 == j) break; } break; case FIND: system("clear"); Menu_search(); int i; scanf("%d",&i); Search(ls,i); break; case DELETE: system("clear"); Menu_delete(); int n; scanf("%d",&n); Delete(ls,n); break; default: printf("無效的選項\n"); sleep(2); break; } } //新增模組 void Add(List *ls) { Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char)); system("clear"); printf("請輸入ID\n"); scanf("%d",&(pb->id)); Node *tmp = ls->head; while(tmp->next) //防止id重複 { if(tmp->next->id == pb->id) { printf("重複id,請重新輸入\n"); sleep(1); return; } break; } system("clear"); printf("請輸入phone\n"); scanf("%ld",&(pb->phone)); system("clear"); printf("請輸入company\n"); scanf("%ld",&(pb->company)); system("clear"); printf("請輸入name\n"); scanf("%s",pb->name); inster_last(ls,pb); } //查詢模組 void Search(List *ls,int i) { Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char)); Node *tmp = ls->head; int j; //用於退出顯示部分 switch(i) { case ID: //通過id查詢 system("clear"); printf("請根據id查詢\n"); scanf("%d",&(pb->id)); while(tmp->next) { tmp = tmp->next; if(pb->id == tmp->id) { printf("id:%d\t",tmp->id); printf("phone:%ld\t",tmp->phone); printf("company%ld\n",tmp->company); } } while(1) //退出顯示 { printf("請按0退出\n"); scanf("%d",&j); if(0 == j) return; } printf("沒有此資訊\n"); //無資訊反饋 sleep(2); break; case PHONE: //通過電話找 system("clear"); printf("請根據phone查詢\n"); scanf("%ld",&(pb->phone)); while(tmp->next) { tmp = tmp->next; if(pb->phone == tmp->phone) { printf("id:%d\t",tmp->id); printf("phone:%ld\t",tmp->phone); printf("company%ld\n",tmp->company); } } while(1) //退出顯示 { printf("請按0退出\n"); scanf("%d",&j); if(0 == j) return; } printf("沒有此資訊\n"); //無資訊反饋 sleep(2); break; case CONPANY: //通過公司電話找 system("clear"); printf("請根據company查詢\n"); scanf("%ld",&(pb->company)); while(tmp->next) { tmp = tmp->next; if(pb->company == tmp->company) { printf("id:%d\t",tmp->id); printf("phone:%ld\t",tmp->phone); printf("company%ld\n",tmp->company); } } while(1) //退出顯示 { printf("請按0退出\n"); scanf("%d",&j); if(0 == j) return; } printf("沒有此資訊\n"); //無資訊反饋 sleep(2); break; case NAME: //通過名字找 system("clear"); printf("請根據name查詢\n"); scanf("%s",pb->name); while(tmp->next) { tmp = tmp->next; if(0 == strcmp(pb->name,tmp->name)) { printf("id:%d\t",tmp->id); printf("phone:%ld\t",tmp->phone); printf("company%ld\n",tmp->company); } } while(1) //退出顯示 { printf("請按0退出\n"); scanf("%d",&j); if(0 == j) return; } printf("沒有此資訊\n"); //無資訊反饋 sleep(2); break; case BACK: printf("請按0返回上一個選單\n"); break; default: //無效指令 printf("無效指令\n"); sleep(2); break; } } //刪除模組 void Delete(List *ls,int i) { int count = 0; //用於判斷是否成功刪除,以及是否有重名的人 Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char)); switch(i) { case ID: system("clear"); printf("請根據id刪除\n"); scanf("%d",&(pb->id)); count = delete_pos(ls,pb); if(count == 1) { printf("刪除id為%d的資料成功\n",pb->id); sleep(1); } else { printf("刪除失敗,無此id\n"); sleep(1); } break; case PHONE: system("clear"); printf("請根據phone查詢\n"); scanf("%ld",&(pb->phone)); count = delete_pos(ls,pb); if(count == 1) { printf("刪除電話為%ld的資料成功\n",pb->phone); sleep(1); } else { printf("刪除失敗,無此電話\n"); sleep(1); } break; case CONPANY: system("clear"); printf("請根據conpany刪除\n"); scanf("%ld",&(pb->company)); count = delete_pos(ls,pb); if(count == 1) { printf("刪除公司電話為%ld的資料成功\n",pb->company); sleep(1); } else { printf("刪除失敗,無此公司電話\n"); sleep(1); } break; case NAME: system("clear"); printf("請根據name刪除\n"); scanf("%s",pb->name); count = delete_pos(ls,pb); if(count > 1) { printf("有%d個相同的名字\n",count); printf("請輸入要刪除的id\n"); scanf("%d",&(pb->id)); count = delete_pos(ls,pb); /* if(count == 1) { printf("刪除%s此人的資料成功\n",pb->name); sleep(1); } else { printf("刪除失敗,無此id的人\n"); sleep(1); }*/ } if(count == 1) { printf("刪除%s此人的資料成功\n",pb->name); sleep(1); } else { printf("刪除失敗,無此id的人\n"); sleep(1); } break; case BACK: printf("請按0返回上一個選單\n"); break; default: printf("無效指令\n"); sleep(2); break; } }
二、 牛客網一道邏輯類的題目
結果為18,下面是解釋過程