利用連結串列實現通訊錄
阿新 • • 發佈:2019-02-05
用連結串列實現一個可以用來儲存資訊的通訊錄,每個人的資訊包括:
程式比較淺顯易懂 ,這裡就不做具體分析 ,大家可以自己多多琢磨分析語句。
姓名、性別、年齡、電話、住址
程式如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define LEN sizeof(struct student) struct student { int i; char name[20]; char tel[15]; char addr[50]; struct student*next; }; void menu() //目錄格式 { printf("=================歡迎來到蘇嵌154班通訊錄======================\n"); printf("-------------------1.新增我班寶寶聯絡資訊---------------------\n"); printf("-------------------2.刪除我班寶寶聯絡資訊---------------------\n"); printf("-------------------3.修改我班寶寶聯絡資訊---------------------\n"); printf("-------------------4.查詢我班寶寶聯絡資訊---------------------\n"); printf("-------------------5.展示我班全體寶寶資訊---------------------\n"); printf("-------------------6.刪除全體寶寶聯絡資訊---------------------\n"); printf("-------------------7.感謝你的偷看,白白-----------------------\n"); printf("=================歡迎來到蘇嵌154班通訊錄======================\n"); } struct student *creat() //建立連結串列 { struct student*p1,*p2,*head; int n = 0; head = NULL; p1=p2=(struct student*)malloc(LEN); printf("輸入新成員學號:\n"); scanf("%d",&p1->i); printf("輸入新成員姓名:\n"); scanf("%s",p1->name); printf("輸入新成員號碼:\n"); scanf("%s",p1->tel); printf("輸入新成員地址:\n"); scanf("%s",p1->addr); printf("新增新成員成功!\n"); while(p1->i != 0) { n = n+1; if(n == 1) head = p1; else p2->next = p1; p2 = p1; p1 = (struct student*)malloc(LEN); printf("輸入新成員學號:\n"); scanf("%d",&p1->i); printf("輸入新成員姓名:\n"); scanf("%s",p1->name); printf("輸入新成員號碼:\n"); scanf("%s",p1->tel); printf("輸入新成員地址:\n"); scanf("%s",p1->addr); printf("新增新成員成功!\n"); } p2->next = NULL; return head; } struct student *add(struct student *head,int index) //增加聯絡人 { printf("新增聯絡人:\n"); struct student *p1,*p2,*p3; p3=(struct student*)malloc(LEN); printf("輸入新成員學號:\n"); scanf("%d",&p3->i); printf("輸入新成員姓名:\n"); scanf("%s",p3->name); printf("輸入新成員號碼:\n"); scanf("%s",p3->tel); printf("輸入新成員地址:\n"); scanf("%s",p3->addr); printf("新增新成員成功!\n"); p1 = p2 = head; while(p1->next != NULL && p1->i != index) { p2 = p1; p1 = p1->next; } if(p1->i == index) { if(p1 == head) { head = p3; p3->next = p1; } else { p2->next = p3; p3->next = p1; } } else { p1->next = p3; p3->next = NULL; } return head; } struct student *delete(struct student *head,char name[20]) //刪除聯絡人 { struct student *p1,*p2; p1 = head; p2 = p1; while(p1->next !=NULL && strcmp(p1->name,name) != 0) { p2=p1; p1=p1->next; } if(strcmp(p1->name,name) == 0) { if(p1 == head) { head = head->next; printf("刪除聯絡人成功\n"); } else { p2->next = p1->next; printf("刪除聯絡人成功\n"); } } else { printf("目前通訊錄沒這個寶寶!\n"); } free(p1); return head; } struct student *modify(struct student *head,char name[20]) //修改聯絡人 { struct student *p; p = head; while(p->next != NULL && strcmp(p->name,name)!=0) { p = p->next; } if(strcmp(p->name,name)==0) { printf("輸入修改成員學號:\n"); scanf("%d",&p->i); printf("輸入修改的姓名:\n"); scanf("%s",p->name); printf("輸入修改的號碼:\n"); scanf("%s",p->tel); printf("輸入修改的地址:\n"); scanf("%s",p->addr); printf("修改成功\n"); } else { printf("目前通訊錄沒這個寶寶!\n"); } return head; } struct student *find(struct student *head,char name[20]) //查詢聯絡人 { struct student *p1; p1 = head; while(p1->next != NULL && strcmp(p1->name,name)!=0) { p1 = p1->next; } if(strcmp(p1->name,name)==0) { printf("序號\t姓名\t號碼\t地址\t\n"); printf("%d\t",p1->i); printf("%s\t",p1->name); printf("%s\t",p1->tel); printf("%s\t",p1->addr); printf("\n"); } else printf("目前通訊錄沒這個寶寶!\n"); } void show(struct student *head) //列印連結串列 { struct student *p; p = head; if(head != NULL) { do { printf("序號\t姓名\t號碼\t地址\t\n"); printf("%d\t",p->i); printf("%s\t",p->name); printf("%s\t",p->tel); printf("%s\t",p->addr); printf("\n"); p = p->next; }while(p != NULL); } else printf("目前通訊錄沒寶寶!\n"); } struct student *clear(struct student *head) { head = NULL; return head; } int main() { int n = 1; int i; struct student *head; head = creat(); char name[20]; int index; while(n) { menu(); printf("請輸入你的騷操作:\n"); scanf("%d",&i); switch(i) { case 1: { printf("請輸入插到哪個學號前:\n"); scanf("%d",&index); head = add(head,index);break; } case 2: { printf("請輸入要刪除聯絡人的姓名:\n"); scanf("%s",name); head = delete(head,name);break; } case 3: { printf("請輸入需要修改的聯絡人的姓名:\n"); scanf("%s",name); modify(head,name);break; } case 4: { printf("請輸入查詢聯絡人的姓名:\n"); scanf("%s",name); find(head,name);break; } case 5: { show(head);break; } case 6: { head = clear(head);break; } default: { break; } } } }
程式比較淺顯易懂 ,這裡就不做具體分析 ,大家可以自己多多琢磨分析語句。