用連結串列實現簡單的通訊錄功能
學習了連結串列後我用連結串列寫了一個簡單的通訊錄程式,主要能實現以下功能
使用連結串列實現增加(在增加人員的過程中有一個自動排序功能,比如按姓名排序)、刪除、修改、查詢的功能;
(1)新增使用者資訊(號碼長度 號碼是否重複)
(2)列出好友資訊(按姓名排序)
(3)查詢好友資訊(按姓名查詢)
(4)刪除好友
(5)退出
#ifndef _ADDRESS_H_ #define _ADDRESS_H_ #define N 30 #define FAILURE 10000 #define SUCCESS 10001 struct addresslist { char ID[N]; char Name[N]; char Add[N]; char Tel[N]; char HomeTel[N]; struct addresslist *next; }; typedef struct addresslist Address; typedef Address *LinkList; #endif
#include<stdio.h> #include"address_list.h" #include<stdlib.h> #include<string.h> void show() { system("clear"); printf("******************************************\n\n"); printf("******* WELCOME TO ADDRESS LIST *******\n\n"); printf("******************************************\n\n"); sleep(2); system("clear"); } void PrintInfo() { printf("**************************************************************\n\n"); printf(" 1.新增使用者資訊 \n"); printf(" 2.列出好友資訊 \n"); printf(" 3.查詢好友資訊 \n"); printf(" 4.刪除好友 \n"); printf(" 5.修改好友資訊 \n"); printf(" 6.退出 \n\n"); printf("**************************************************************\n\n"); printf("Please input your choice :\n"); } void LinkInit(LinkList *L) { (*L)=(LinkList)malloc(sizeof(Address)); (*L)->next = NULL; } int InsertInfo(LinkList *L) { LinkList temp = *L; LinkList p; p=(LinkList)malloc(sizeof(Address)); printf("Please input the id:\n"); scanf("%s",p->ID); printf("Please input the name:\n"); scanf("%s",p->Name); printf("Please input the add:\n"); scanf("%s",p->Add); printf("Please input the tel:\n"); scanf("%s",p->Tel); while(strlen(p->Tel)!=11) { printf("Error,Please input the tel again!\n"); scanf("%s",p->Tel); break; } printf("Please input the hometel:\n"); scanf("%s",p->HomeTel); while(strlen(p->HomeTel)!=8) { printf("Error,Please input the hometel again!\n"); scanf("%s",p->HomeTel); break; } while(temp->next) { if(strcmp((temp->next)->Tel,p->Tel) == 0) { printf("The same telphone!\n"); return 0; } temp = temp->next; } temp=*L; if((temp->next)==NULL) { p->next=temp->next; temp->next=p; } else { while(temp->next) { if(strcmp((temp->next)->Name,p->Name)>0) { p->next=temp->next; temp->next=p; break; } temp=temp->next; } if(temp->next ==NULL) { p->next = temp->next; temp->next =p ; } } } int ListInfo(LinkList L) { if(NULL==L->next) { printf("The Addresslist is empty!\n"); } else { LinkList p=L->next; while(p) { printf("ID:%s NAME:%s ADD:%s TEL:%s HOMETEL:%s \n",&p->ID,p->Name,p->Add,p->Tel,p->HomeTel); p=p->next; } } } int SearchInfo(LinkList L) { LinkList p = L->next; char a[10]={0}; printf("Please input the name you want to find:\n"); scanf("%s",a); while(p) { if(strcmp(p->Name,a)==0) { printf("ID:%s NAME:%s ADD:%s TEL:%s HOMETEL:%s \n",p->ID,p->Name,p->Add,p->Tel,p->HomeTel); break; } else { p=p->next; } } if(p==NULL) { printf("No one!\n"); } } int DeleteInfo(LinkList L) { LinkList p=L; LinkList temp; if(L==NULL) { return FAILURE; } char a[10]={0}; printf("Please input the name you want to delete:\n"); scanf("%s",a); while(p) { if(strcmp((p->next)->Name,a)==0) { temp=p->next; p->next=temp->next; free(temp); printf("Delete Success!\n"); break; } } return SUCCESS; } int ChangeInfo(LinkList *L) { LinkList p=*L; LinkList temp; LinkList n=*L; char a[10]={0}; printf("Please input the name you want to change:\n"); scanf("%s",a); while(p->next) { temp=(LinkList)malloc(sizeof(Address)); if(strcmp((p->next)->Name,a)==0) { printf("Please input the information you want to change:ID NAME ADD TEL HOMETEL\n"); scanf("%s%s%s%s%s",&temp->ID,temp->Name,temp->Add,temp->Tel,temp->HomeTel); if(strlen(temp->Tel) != 11) { printf("ERROR Tel!\n"); return 0; } if(strlen(temp->HomeTel) != 8) { printf("ERROR HomeTel!\n"); return 0; } while(n->next) { if(strcmp((n->next)->Tel,temp->Tel) == 0) { printf("Exist the same tel!\n"); return 0; } n = n->next; } strcpy((p->next)->ID , temp->ID); strcpy((p->next)->Name , temp->Name); strcpy((p->next)->Add , temp->Add); strcpy((p->next)->Tel , temp->Tel); strcpy((p->next)->HomeTel , temp->HomeTel); printf("Change Success!\n");
break;
}
else
{
p = p->next;
}
}
}
#include <stdio.h> #include"address_list.h" #include<stdlib.h> int main() { LinkList list; char choice[10] = {0}; LinkInit(&list); show(); while (1) { PrintInfo(); scanf("%s", choice); switch (atoi(&choice[0])) { case 1: InsertInfo(&list); printf("**************************************************************\n\n"); break; case 2: ListInfo(list); printf("**************************************************************\n\n"); break; case 3: SearchInfo(list); printf("**************************************************************\n\n"); break; case 4: DeleteInfo(list); printf("**************************************************************\n\n"); break; case 5: ChangeInfo(&list); printf("**************************************************************\n\n"); break; case 6: exit(1); break; default: printf("Unkown Input!\n"); break; } }
相關推薦
用連結串列實現簡單的通訊錄功能
學習了連結串列後我用連結串列寫了一個簡單的通訊錄程式,主要能實現以下功能 使用連結串列實現增加(在增加人員的過程中有一個自動排序功能,比如按姓名排序)、刪除、修改、查詢的功能; (1)新增使用者資訊(號碼長度 號碼是否重複) (2)列出好友資訊(按姓名排序) (3)
用連結串列實現一個簡單的學生操作管理系統C語言版
#include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #def
用連結串列實現通訊錄程式設計
#include <stdio.h> #include <string.h> #include <stdlib.h> struct node //定義連結串列 {char name[20];char phone_n
通訊錄(連結串列實現,基本功能都有)
1、標頭檔案 #ifndef _LIST_H_ #define _LIST_H_ #include <stdio.h> #define FAILURE 1000 #define SUCCESS 1001 #define FALSE 1002 #define
棧的建立-----用連結串列實現棧
設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT publi
Java用連結串列實現棧
上一篇實現了佇列,這一篇我們實現棧。 棧是後入先出的資料結構。 連結串列中插入資料有頭插法和尾插法,本篇我們使用頭插法。 不多說直接上程式碼 連結串列的節點定義和上一篇使用的是同一個,可以參考上一篇。 public class StackImpl<T> { p
Java用連結串列實現佇列
佇列--先入先出 棧---後入先出 連結串列實現佇列和棧。首先我們需要構建一個連結串列。連結串列有哪幾要素? 1、連結串列本身的value 2、連結串列的next指標,next指標指的還是同樣型別的值。 下邊看程式碼 public class Element&l
十三 用連結串列實現棧
用連結串列實現棧: 連結串列棧: package com.lt.datastructure.stackqueue; /* * 使用連結串列實現棧 */ public class LinkedListStack<E> implements Stack
【演算法】C++用連結串列實現一個箱子排序附原始碼詳解
01 箱子排序 1.1 什麼是分配排序? 分配排序的基本思想:排序過程無須比較關鍵字,而是通過"分配"和"收集"過程來實現排序.它們的時間複雜度可達到線性階:O(n)。 1.2 什麼是箱子排序? 箱子排序是分配排序的一種,箱子排序也稱桶排序(Bucket Sort),其基本思想是:設定若干個箱子,依次掃描待
資料結構------使用單向連結串列實現簡單的學生成績管理操作
函式宣告 ypedef int status; typedef int ElemType; //連結串列節點及連結串列資料表示定義 typedef struct No
資料結構:用連結串列實現棧的括號匹配
完成以下程式,並在右邊空白處,對錯誤進行修改,並記錄下程式執行結果: 1. 編寫演算法,判斷一表達式中的括號是否配對,包括大、中、小三類括號。 連結串列版本: #include <cstdio> #include <cmath> #inclu
Problem E: 用連結串列實現約瑟夫環
Description 你聽說過約瑟夫問題嗎?問題大致如下:首先n個人圍成一個圈,標記為1到n號。接著,從1號開始報數(從1開始),然後2號報數,然後3號。。。當有人報到到m時,這個人就要踢出比賽,然後從被踢出的人的下一個人開始,重新報數(從1開始)。這樣經過n-1次後,就只剩下了一個人,問最後剩下的
佇列C++ | 用連結串列實現佇列_2
用連結串列實現佇列 /*Queue - Linked List implementation*/ #include<stdio.h> #include<stdlib.h> struct Node { int data; struct Node* next;
Java資料結構之——棧:用連結串列實現
class Node<E>{ E data; Node<E> next = null; public Node(E data){ this.data = data; } } public class ListStack<
資料結構三.用連結串列實現棧
程式碼如下: package dataStruct; class Node { Object element; Node next; public Node(Object element){ this(element,null); } /**
用連結串列實現兩個集合求並集
#include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct node{ int data; struct node *next; } LinkList; LinkLis
c語言將資料寫入檔案(用連結串列實現)
/*c語言將資料寫入檔案,用連結串列實現*/ #include #include #include /*定義結構體*/ typedef struct Node { char id[10];
用連結串列實現棧(Java版)
/** /** * 用單鏈表實現棧 * * 表示連結串列的一個節點 * @author ly * */ public class Node { Object element; Node next; public Node(Object element){ this(elemen
【資料結構】用連結串列實現多項式運算
一元多項式的運算包括加法減法和乘法,而多項式的加法和乘法都可以依靠多項式的加法來實現,所以本文僅僅講解如何用連結串列實現一元多項式的加法。 數學上的一元多項式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … +
棧 stack 用連結串列實現
#ifndef STACKWITHLINKEDLIST_H #define STACKWITHLINKEDLIST_H #include "LinkedList.h" template<typename T> class Stack{ public: