单向链表实例:终端交互简易通讯录

  1 #include    <stdio.h>
  2 #include    <stdlib.h>
  3 #include    <string.h>
  4
  5
  6 typedef struct Contacts_infomation{
  7     char name[13];
  8     char work_unit[61];
  9     char phone_number[12];
 10     char E_mail[61];
 11     struct Contacts_infomation *next;
 12 }con_info;
 13
 14
 15 con_info * Creat_node(void)
 16 {
 17     con_info *new;
 18
 19     new = (con_info *)malloc(sizeof(con_info));
 20     if(!new){
 21         printf("Malloc Error!\n");
 22         exit(-1);
 23     }
 24     new->next = NULL;
 25
 26     return new;
 27 }
 28
 29 int insert_node(con_info ** phead)
 30 {
 31     con_info *new, *cur;
 32
 33     cur = *phead;
 34     new = Creat_node();
 35     if(!new){
 36         return -1;
 37     }
 38
 39     printf("please input name,work unit,phone number and E-mail (separated by enter):\n");
 40     printf("name:");
 41     scanf("%s", new->name);
 42     printf("work unit:");
 43     scanf("%s", new->work_unit);
 44     printf("phone number:");
 45     scanf("%s", new->phone_number);
 46     printf("E-mail:");
 47     scanf("%s", new->E_mail);
 48
 49     if(!(*phead)){
 50         *phead = new;
 51         return 0;
 52     }
 53     if(strncmp((*phead)->name,new->name,3) > 0){
 54         new->next = *phead;
 55         *phead = new;
 56         return 0;
 57     }
 58     while(cur->next){
 59         if(strncmp(cur->next->name, new->name,3) > 0){
 60             new->next = cur->next;
 61             cur->next = new;
 62             return 0;
 63         }
 64     }
 65     cur->next = new;
 66
 67     return 0;
 68 }
 69 int  del_node(con_info **phead){
 70     con_info *cur = *phead;
 71     char name[13];
 72
 73     if(!cur){
 74         printf("Address book is empty\n");
 75         return -1;
 76     }
 77     printf("please input want delete name: ");
 78     scanf("%s", name);
 79
 80     if(strcasecmp((*phead)->name, name) == 0){
 81         con_info *tmp = (*phead)->next;
 82         free(*phead);
 83         *phead = tmp;
 84         return 0;
 85     }
 86     while(cur->next){
 87         if(strcmp(cur->next->name, name) == 0){
 88             con_info *tmp = cur->next;
 89             cur->next = tmp->next;
 90             free(tmp);
 91             return 0;
 92         }
 93         cur = cur->next;
 94     }
 95     getchar();
 96     printf("\n\nCan‘t find %s\n", name);
 97     printf("\n\nPlease input Enter continue...");
 98     char ch = getchar();
 99
100     return 0;
101 }
102
103 int mod_node(con_info **phead){
104     con_info *cur =  *phead;
105     char name[13];
106     char reply[10];
107
108     if(!cur){
109         printf("Address book is empty\n");
110         return -1;
111     }
112     printf("Please input want modify name: ");
113     scanf("%s", name);
114     while(cur){
115         if(strcasecmp(cur->name, name) == 0){
116
117             printf("Modify name?(y/any key): ");
118             scanf("%s", reply);
119             if(strcmp(reply, "y") == 0){
120                 printf("Please new input name: ");
121                 scanf("%s", cur->name);
122             }
123             printf("Modify work unit?(y/any key): ");
124             scanf("%s", reply);
125             if(strcmp(reply, "y") == 0){
126                 printf("Please input new work_unit: ");
127                 scanf("%s", cur->work_unit);
128             }
129             printf("Modify phone number?(y/any key): ");
130             scanf("%s", reply);
131             if(strcmp(reply, "y") == 0){
132                 printf("Please input new phone number: ");
133                 scanf("%s", cur->phone_number);
134             }
135             printf("Modify E-mail?(y/any key): ");
136             scanf("%s", reply);
137             if(strcmp(reply, "y") == 0){
138                 printf("Please input new E-mail: ");
139                 scanf("%s", cur->E_mail);
140             }
141             return 0;
142         }
143     cur = cur->next;
144     }
145     getchar();
146     printf("No contact was found.\n");
147     printf("\n\nPlease input Enter continue...");
148     char ch = getchar();
149     return 0;
150 }
151
152 int search_node(con_info **phead){
153     con_info *cur = *phead;
154     char in[13];
155     if(!cur){
156         printf("Address book is empty\n");
157         return -1;
158     }
159     printf("Please input name or phone number: ");
160     scanf("%s", in);
161
162     while(cur){
163         if(strcasecmp(cur->name, in) == 0 || strcmp(cur->phone_number, in) == 0){
164             printf("name\t\twork unit\t\t\t\t\t\t\tphone number\t\tE-mail\n");
165             printf("%-16s%-64s%-24s%-30s\n", cur->name, cur->work_unit, cur->phone_number, cur->E_mail);
166             getchar();
167             printf("Please input Enter continue...");
168             char ch = getchar();
169
170             return 0;
171         }
172         cur = cur->next;
173     }
174     printf("\n\nCan‘t find %s\n", in);
175     getchar();
176     printf("Please input Enter continue...");
177     char ch = getchar();
178
179     return 0;
180 }
181 int print_con(con_info *phead){
182     con_info *cur = phead;
183
184     printf("name\t\twork unit\t\t\t\t\t\t\tphone number\t\tE-mail\n");
185     if(!cur){
186         printf("NULL\n");
187         return -1;
188     }
189     while(cur){
190         printf("%-16s%-64s%-24s%-30s\n", cur->name, cur->work_unit, cur->phone_number, cur->E_mail);
191         cur = cur->next;
192     }
193     getchar();
194     printf("\n\nPlease input Enter continue...");
195     char ch = getchar();
196
197     return 0;
198 }
199
200
201
202
203 int main(void)
204 {
205     con_info *head = NULL;
206     char op[20];
207     char dd[20];
208
209     do{
210         printf("\n\n\n1.New contacts\n2.Delete contact\n3.Unfoling contacts\n4.Modify contacts\n5.serch\n6.Exit\n\n8.Clean screen\n\n********************************\n\n\n");
211         printf("Please inpu op: ");
212         scanf("%s", op);
213         printf("\n\n");
214         if(!strcmp(op,"1")){
215             insert_node(&head);
216         }else if(!strcmp(op, "2")){
217             del_node(&head);
218         }else if(!strcmp(op, "3")){
219             print_con(head);
220         }else if(!strcmp(op, "4")){
221             mod_node(&head);
222         }else if(!strcmp(op, "5")){
223             search_node(&head);
224         }else if(!strcmp(op, "6")){
225             break;
226         }else if(!strcmp(op, "8")){
227             //printf("\033[2J") ;
228             system("clear");
229         }
230         else{
231             printf("Ipunt opearton error\n");
232         }
233     }while(1);
234
235     return 0;
236 }

由于通讯录不怎么需要倒序操作,又是一个简易的,所以干脆就使用了单向链表。Running demo:

交互界面(^_^简易的,所以特别简陋):

各个功能演示一遍:

原文地址:https://www.cnblogs.com/BMing/p/10003247.html

时间: 2024-08-07 11:15:58

单向链表实例:终端交互简易通讯录的相关文章

实例讲解——单向链表(2)

深入链表的操作 将使用内部类,完成链表的操作! 一,链表的改进 之前已经实现了简单的单向链表,但是因为要用手工去处理各个节点的关系,这样肯定不行. 所以此处最好将节点的操作进行封装.这样用户操作就很方便了. 假设现在的节点操作有以下几种:增加数据,查找数据,删除数据. 特别强调的是,如果要删除节点的话,直接修改上一个节点就可以. 增加节点:就是在节点最后进行增加. 查找节点:就是依次递归的方式查找. 删除节点:就是改变引用传递地址. 在程序开发中,必须考虑两种情况: 1)第一次执行的时候,第一次

单向链表排序

一.冒泡排序简述 1.概念 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端. 2.实例分析 以数组为例进行说明: 数组a[4] = {4,3,2,1} 从前向后依次比较两个元素的大小,如果顺序错误就交换它们.经过这样一轮,最大的元素就被

单向链表实现源码

单向链表实现源码public class LinkList<T>{//定义一个内部类Node,Node实例代表链表的节点private class Node{//保存节点的数据private T data;//指向下个节点的引用private Node next;//无参数的构造器public Node(){}//初始化全部属性的构造器public Node(T data , Node next){this.data = data;this.next = next;}}//保存该链表的头节点p

【转】单向链表(单链表)的Java实现

最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因为比较偏好,学习WinForm时比较认真,数据库操作也自己有所研究.但链表这个东西我 还真没有学习和研究过,加上最近自己在看WPF,而课程也到了JSP了,比较紧. 但是我还是抽了一个晚上加半天的时间看了一下单向链表.并且使用Java试着写了一个实例出来.没有接触过链表的朋友可以作为参考,希望大家多提

数据结构-线性表之单向链表--一点一滴

单向链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 单向链表的数据结构可以分为两部分:数据域和指针域,数据域存储数据,指针域指向下一个储存节点的地址.分为动态单向链表和静态单向链表.单向链表也可以根据是否带头节点分为带头节点结构和无带头节点结构.我们把指向单链表的指针为头指针.头指针所指的不存放数据元素的第一个节点称作头节点.存放数据元素的节点成为第一个数据元素节点. 注:第一个数据元素节点在带头节点单链表中是第二个节点:而在不带头节

I学霸官方免费教程三十七:Java数据结构之单向链表结构

数据结构之单向链表 例如:现有双向链表OneWayLinked中存储着1,2,3,4四个元素,那么集合对象中会有4个节点A.B.C.D,由上述结构可以知道,节点A中存储着元素1和节点B:节点B中存储着元素2和节点C,节点C中存储着元素3和节点D,节点D中存储着元素4和null.如果现在要在元素2和3中间插入一个元素5:过程如下:1.创建节点E,E中存储元素52.将B中的下一个节点修改为节点E3.将E中的下一个节点赋值为节点C从上述过程看,插入时没有节点位置移动的操作,所以效率比较高:删除的过程和

复习下C 链表操作(单向链表)

Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不用的 包装体(struct 结构体).使用GCC/Clang (可以google 下.Clang 比GCC 更优化,) 编译指令. 转换OC 为 C . 终端 使用Clang 命令参考 clang -rewrite-objc file.m 查看file.cpp 文件为编译转换的C 单向链表 创建 .

数据结构与算法学习-单向链表的实现

链表(Chain本文所说链表均为单向链表,以下均简称单向链表)实际上是由节点(Node)组成的,一个链表拥有不定数量的节点.而向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的. 节点(Node)是由一个需要储存的对象及对下一个节点的引用组成的.也就是说,节点拥有两个成员:储存的对象.对下一个节点的引用. 这样说可能大家不是很明白,我贴一张图大家可能更容易理解. package LinkedList; /** * <p><strong>

算法总结之 反转部分单向链表

给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转 思路: 本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点 1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点 2 找到第from-1个节点pre和第to+1个节点tPos,fPre即要反转部分的前一个节点,tPos是反转部分的后一个节点,把反转部分先反转,然后正确的链接fPre和tPos package TT; impor