用C++编写一道程序

利用列表设计一个小型电话簿管理程序,要求具有加入联系人,删除联系人,显示电话簿和查询联系人电话,存盘等基本功能... 利用列表设计一个小型电话簿管理程序,要求具有加入联系人,删除联系人,显示电话簿和查询联系人电话,存盘等基本功能 展开
 我来答
郝在益
2013-09-03 · TA获得超过2079个赞
知道小有建树答主
回答量:1496
采纳率:54%
帮助的人:632万
展开全部

这个和你的要求差不多,你改以下就可以使用了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

typedef struct Node
{
char data;
struct  Node * next;
}node;

void Insert(node* );//插入
void Find(node* );//查找
int  Count(node*);//链表长度
void Update(node* );//修改
void Delete(node* );//删除
void Show(node* );//输出

int main()
{
int a;
node head;
head.next = NULL;

printf("***********链表的操作************\n\n");

while(1)
{
a = 0;
printf("***********请选择您的操作***********\n\n");
printf("1 链表的插入\t 2 链表的查找\t 3 链表的修改\n4 链表的删除\t 5 链表的输出\t 6 退出系统\n");
scanf("%d",&a);

switch(a)
{
   case 1:
   Insert(&head);
   break;
   case 2:
   Find(&head);
   break;
   case 3:
   Update(&head);
   break;
   case 4:
   Delete(&head);
   break;
   case 5:
   Show(&head);
   break;
   case 6:
   exit(-1);
   break;
   default :
   printf("输入错误!");
   break;
}

}
    return 0;
}

int Count(node* head)
{
node* pH = head;
int count = 0;
while (pH->next != NULL )
{
pH = pH->next;
count++;
}

return count;
}

void Insert(node* head )
{
int which = 0;
int i = 0;
int j = 1;
char ch;
node * pH = head;

printf("\n1.首插入  2.未插入  3.插入到位置i\n");
printf("请选择:");
scanf("%d",&which);
ch = getchar();
if (which == 1)
{
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
}
else if (2 == which)
{
while (pH->next != NULL)
{
pH = pH->next;
}
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
}
else if ( 3 == which )
{
printf("请输入i的值:");
scanf("%d",&i);
ch = getchar();
if ( (i > 0) && (i <= Count(head) + 1) )
{
printf("i = %d",i);
while (j < i)
{
pH = pH->next;
j++;
}
printf("请输入值:");
scanf("%c",&ch);
node * q = (node *)malloc(sizeof(Node));
q->data = ch;
q->next = pH->next;
pH->next = q;
}
else
{
printf("i输入错误!\n");
}
}
else
{
printf("选择错误!\n");
}

return;
}

void Show(node* pH)
{
printf("链表输出:\n");
if ( pH->next == NULL)
{
printf("链表为空!\n");
return;
}
else
{
while ( pH->next != NULL )
{
pH = pH->next;
printf("%3c",pH->data);
}
printf("\n输出结束!\n");
}
}

void Find(node* head)
{
int which = 0;
int j = 0;
int i = 0;
char ch;
bool is_have = false;
node * q = head->next;

if ( Count(head) == 0 )
{
printf("链表为空!无法查找.\n");
return;
}

printf(" 1.查找内容的位置   2.查找位置的内容\n");
scanf("%d",&which);
ch = getchar();

if (1 == which)
{
printf("请输入要查找的内容:");
scanf("%c",&ch);

while ( q != NULL)
{
j++;
if ( q->data == ch)
{
printf("%c是第%d个。\n",ch,j);
is_have = true;
}
q = q->next;
}

if ( is_have == false )
{
printf("所查找的内容在链表中不存在!");
}
}
else if ( 2 == which )
{
j = 0;
printf("请输入要查找的位置:");
scanf("%d",&i);

if ( i > Count(head) || i < 1 )
{
printf("位置错误!无法查找。\n");
return;
}

while ( q != NULL && j < i-1 )
{
q = q->next;
j++;
}
printf("内容为:%c",q->data);
}
else
{
printf("选择错误!\n");
}

return;
}

void Update(node* head)
{
node * q = head->next;
int i = 0;
int j = 0;
char ch;

if ( Count(head) == 0 )
{
printf("链表为空!无法查找.\n");
return;
}

printf("请输入要修改的位置:");
scanf("%d",&i);
ch = getchar();
if ( i > Count(head) || i < 1 )
{
printf("位置错误!无法修改。\n");
return;
}

printf("请输入修该的值:");
scanf("%c",&ch);
while ( q != NULL && j < i-1 )
{
q = q->next;
j++;
}
q->data = ch;
printf("修改成功!\n");

return;
}

void Delete(node* head)
{
node * q = head->next;
node * p = head;
int i = 0;
int j = 0;
char ch;

if ( Count(head) == 0 )
{
printf("链表为空!无法删除.\n");
return;
}

printf("  1.全部删除  2.删除单个\n");
scanf("%d",&i);
ch = getchar();

if ( 1 == i)
{
while( q != NULL )
{
p = p->next;
q = q->next;
free(p);
}
head->next = NULL;
printf("释放成功!\n");
}
else if ( 2 == i )
{
printf("请输入要删除的位置:");
scanf("%d",&i);
ch = getchar();
if ( i > Count(head) || i < 1 )
{
printf("位置错误!无法删除。\n");
return;
}

while ( q != NULL && j < i-1 )
{
p = p->next;
q = q->next;
j++;
}
p->next = q->next;
free(q);

printf("删除成功!\n");
}
else
{
printf("选择错误!\n");
}

}
百度网友455632d898
2013-09-03 · TA获得超过275个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:338万
展开全部
用数组或者链表的添加删除,修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式