inf_t getInf(void) //获取联系人信息 {0 H$ V, Q$ H( R) t7 u) g
inf_t t_get;5 ~1 m( Y# i4 ~
char *pch;* X" s. W; k. o3 P
printf("\t联系人姓名:");
P& z/ ~ y3 D$ I+ q: P+ R setbuf(stdin,(char *)0);
7 ?# @/ Q2 a9 ~ scanf("%[^\n]",t_get.name); //存入除换行以外的所有字符
% m, K# g P& q1 r2 c7 K* t printf("\t该联系人地址:");) F: |- q) i# k/ Q- H9 t' ?( v
setbuf(stdin,(char *)0);
: s; l# R- ?* N7 u8 X' |! w scanf("%[^\n]",t_get.address);! _+ g0 z' _1 C8 q; K" A
lableTel:2 A' E9 H% {0 @ d9 T w
printf("\t电话或手机号码:");. N \6 ?: |1 ^5 J
setbuf(stdin,(char *)0);# U* R1 @4 m, S& g3 O. `
scanf("%s",t_get.tel);
2 |' O# H4 M& r) B L4 i /*处理当号码不为数字的情况*/
t0 z0 p) @. _, d h for(pch = t_get.tel; *pch != '\0'; pch++){1 N- ~6 I) i) f
if(*pch < '0' || *pch > '9'){0 J1 e& W& s% `( n& X
puts("该通讯录暂只支持纯数字的电话号码!");
+ E8 _" L& j! x% }7 n' @* H$ O5 u goto lableTel;
' L- M3 w# y/ @" g }9 K8 z6 C3 o, p7 m
}
8 J! `6 Q( i7 X return t_get;
6 f% W: j! `9 U }( |5 p6 n9 w- y5 f6 u
void insert(inf_t inf)//创建一个新结点,数据域存放inf,通过头插法插入单链表* Z( K. R Z; j p6 ]0 R3 k
{; r; \' p+ d& c% d5 d4 j! e3 o& {
link p = (struct node *)malloc(sizeof *p);
3 ?: L; m2 j- r8 R p->date = inf;5 a8 J, J3 q% W: _$ r' S2 p
p->next = head;
' f0 l O) A+ D2 q& U$ \' H head = p;5 T+ o3 U" Y5 b: l9 ]9 j: R
}
7 U: l; c) V \. t /*匹配单链表中为姓名项为name的节点 pre为指向该节点前一项的指针的指针 */5 G+ f% g* r( R# U; Z' n Y
link pop(const char *name,link *pre){5 v+ k( G, r1 E+ [1 T! f
link p = head;4 [- ~; A, Z! W! \/ [ c
while(p != NULL){
! C4 y/ _: |' n2 N. J6 M/ ` if(strcmp(name,p->date.name) == 0){
; r3 E- P+ f/ L return p;
: a* P6 J1 X J& | F }
0 X0 x4 G, M8 ?4 r W7 f *pre = p;
7 V# V8 K7 {- |/ }- ~% ^( H$ C4 Z p = p->next;+ j$ ]6 e6 D6 n9 a* z# e0 A* ?
}. u6 n! d2 z" V9 g V4 p
return NULL;
- n# h+ }8 r6 A0 D }
3 W6 w0 p6 ^$ B d$ P' u void del(link pre,link cur) //删除cur结点,pre为cur前一个结点
1 g5 i2 @" z8 i; C( t* \/ T {
3 P0 S6 H) o# u3 c5 M if(cur == head){
! g T7 F8 F8 ]) I* g head = cur->next;
% o: ?6 o! r5 C# ~, { }
W( [7 d! M7 G3 d2 |& K else pre->next = cur->next;9 y! g$ ?- ^. c9 F1 `! e3 u5 m2 l' C. ?
free(cur);
8 @& l& \( e! w0 G; v }+ G! R& T/ Z! Y3 m s
void outputOne(link p)4 Z; o1 k/ L2 w' p. ?1 G6 H! s6 Z
{* h* v: M9 Z/ q8 \ p
printf("|%-20s%-30s%-15s|\n",p->date.name,p->date.address,p->date.tel);8 v$ L& ~8 _. p4 ?
}
7 Y. n7 k' R' A* |6 N$ v void output(void)
; r+ i& t: D& E) V {
. C, A1 `2 }; J% y6 {3 X- f' s7 G( N link p = head;
9 Z: V& N c, \1 w8 M% X% M2 U4 W B_PUT;3 p: t" |* c! e
while(p != NULL){
5 i- s# {. L1 S$ E1 u) \ outputOne(p);
# g, m, y5 ~; B+ B p = p->next;, e W% M. ? K1 D7 Y" o, Q
}
; X) [4 ?3 r; I/ v* D END_PUT; |