#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node{
struct {
char name[20];
char number[12];
}data; //定义结构变量
char name[20];
char number[12];
struct Node *next;
}LNode,*LinkList;
void create(LinkList &L,int n)
{
LinkList p;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //建立带头结点的单链表
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode)); //生成新结点
printf("请输入联系人姓名:");
scanf("%s",p->data.name);
printf("请输入联系人电话号码:");
scanf("%s",p->data.number);
p->next=L->next;
L->next=p;
}
}
int insert(LinkList &L,int i,LinkList &s){//插入数据
LinkList p=L;int j=0;
while (p&&j<i-1){
p=p->next;++j;
}
if(!p||j>i-1){
printf("插入位置不合法!");
exit (1);
}
else{
s=(LinkList)malloc(sizeof(LinkList));
printf("请输入需要插入的联系人姓名:");
scanf("%s",s->data.name);
printf("请输入需要插入的联系人电话:");
scanf("%s",s->data.number);
s->next=p->next;
p->next=s;
}
return 1;
}
int delete0(LinkList &L,int i,LinkList &e){//删除第i个结点
LinkList p=L,q;
int j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1){
printf("删除位置不合法");
exit(1);
}
else{
q=p->next;
p->next=q->next;
// e=q;
free(q);
printf("您已删除成功!\n");
}
}
int locate(LinkList &L,int i,LinkList &s){
LinkList p;int j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1){
printf("查找位置不合法");
exit(1);
}
else printf("%s\t%s\n",p->data.name,p->data.number);
}
void exit()
{
printf("退出中.....\n");
system("pause");
exit(0);
}
void print(LinkList &L)
{
LinkList p;
p=L;
printf("姓名\t\t电话\n\n");
while(p->next!=NULL){
p=p->next;
printf("%s\t%s\n",p->data.name,p->data.number);
}
}
int main()
{
int choice;
int n,i,j;
LinkList p=NULL;
LinkList L,s,e;
while(1)
{
printf("********************\n");
printf("1.创建链表\n");
printf("2.插入个人信息\n");
printf("3.删除个人信息\n");
printf("4.显示全部信息\n");
printf("5.查找个人信息\n");
printf("6.退出\n");
printf("********************\n");
printf("请输入功能序号\n");
scanf("%d",&choice);
switch(choice) {
case 1:
printf("输入你想创建的数据组数:");
scanf("%d",&n);
create(L,n);
break;
case 2:
printf("请输入需要插入的位置:");
scanf("%d",&i);
insert(L,i,s);
break;
case 3:
printf("输入你想删除的位置:");
scanf("%d",&i);
delete0(L,i,e);
break;
case 4:
print(L);
break;
case 5:
printf("输入你想查找的位置:");
scanf("%
d",&i);
locate(L,i,s);
case 6:
exit();
break;
default:printf("输入有误,请重新输入:");
break;
}
}
return 0;
}