鱼C论坛

 找回密码
 立即注册
查看: 3942|回复: 2

输入ID限制为整数,我删除操作后,为什么就是不能删除第一个节点,插入也是一样没有OK

[复制链接]
发表于 2012-4-1 18:27:08 | 显示全部楼层 |阅读模式
3鱼币
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#define LEN sizeof(struct student)//用宏定义分配空间大小,是程序的可读性增强

struct student *creat();                               //创建链表的声明
void print(struct student *head);                      //打印链表的声明
struct student *del(struct student *head);             //需要删除ID号的通讯信息
void jiemian();                                        //将界面图像提取处理的功能函数声明
void chaxun(struct student *head);                     //查询通讯信息功能函数的声明
struct student *increase(struct student *head);                   //添加通讯信息功能函数的声明
struct student
{
int id;
char name[20];
char sex[20];
char cellphone[20];
char QQ[20];
struct student *next;

};

int n;//定义全局变量,作为结点数
void main()
{
struct student *stu,*p;
    int a=1;
    jiemian();
printf("$请建立通讯录信息,以输入ID号0结束通讯录信息的输入操作$\n");
stu=creat();
p=stu;
system("cls");
    jiemian();
printf("亲,(*^__^*)请输入0-5操作数进行操作\n");
while(a!=0)
{
scanf("%d",&a);
switch (a)
{
case 4:print(p);break;
case 0:        ; break;
case 3:del(p);break;
case 2:chaxun(p);break;
case 1:increase(p);break;
}
    }
printf("\n\n");
system("pause");
}
void jiemian()
{
   printf("****************************************************\n");
   printf("*******----------welcome to you------------*********\n");
   printf("*********欢迎使用文成哥通讯信息管理系统*************\n");
   printf("★                                                ★\n");
   printf("☆                                                ☆\n");
   printf("★                1.插入通讯录信息                ★\n");
   printf("☆                2.查询通讯录信息                ☆\n");
   printf("★                3.删除通讯录信息                ★\n");
   printf("☆                4.输出通讯录信息                ☆\n");
   printf("★                5.保存到文件                    ★\n");
   printf("☆                0.退出通讯录系统                ☆\n");
   printf("****************************************************\n");
}
struct student *creat()
{
      struct student  *head;
   struct student  *p1,*p2;
   p1=p2=(struct student *)malloc(LEN);
   printf("请输入ID号:");
   scanf("%d",&p1->id);
   printf("请输入姓名:");
   scanf("%s",&p1->name);
   printf("请输入性别:");                 //输入数据对数据进行存储
   scanf("%s",&p1->sex);
   printf("请输入手机号码:");
   scanf("%s",&p1->cellphone);
   printf("请输入QQ: ");
   scanf("%s",&p1->QQ);
   head=NULL;
   n=0;
   while(p1->id)
   {
          n++;
    if(n==1)
    {
     head = p1;//让头结点指向P1所指向的结点
    }
    else
    {
     p2->next = p1;
    }
   p2=p1;
      p1=(struct student *)malloc(LEN);//为产生新的节点分配空间
   printf("请输入ID号:");
   scanf("%d",&p1->id);
   if(p1->id==0)break;
   printf("请输入姓名:");
   scanf("%s",&p1->name);
   printf("请输入性别:");
   scanf("%s",&p1->sex);
   printf("请输入手机号码:");
   scanf("%s",&p1->cellphone);
   printf("请输入QQ: ");
   scanf("%s",&p1->QQ);
   }
   p2->next = NULL;
    return head;    //头节点地址返回给主函数
}
void chaxun(struct student *head)
{   
  struct student *p1,*p2;
  int ID;
  p1=head;
     printf("请输入要查询的ID号:");
  scanf("%d",&ID);
  while(p1->id!=ID&&p1->next !=NULL)
  {
        p2 = p1;
  p1 = p1->next;
  }
  if(p1->id ==ID)
   printf("ID号:%d 姓名:%s 性别:%s 手机号码:%s QQ:%s\n",p1->id,p1->name,p1->sex,p1->cellphone,p1->QQ);
}
void print(struct student *head)
{
struct student *p;
p=head;
if(NULL!=head)
{
     do
  {
           printf("ID号:%d 姓名:%s 性别:%s 手机号码:%s QQ:%s\n",p->id,p->name,p->sex,p->cellphone,p->QQ);
        p=p->next;
  }while(p);
}
}
struct student *del(struct student *head)
{   
struct student *p1,*p2;
int num;
printf("请输入要删除的ID号");
    scanf("%d",&num);
if(NULL==head)
{
  printf("\nThis list is null!\n");
  goto end;
}
p1=head;
while(p1->id!=num&&p1->next!=NULL)
{
     p2=p1;
  p1=p1->next;
}
if(num==p1->id)
{
  if(p1==head)
  {
   head=p1->next;
  }
  else
  {
   p2->next=p1->next;
  }
  printf("\nDelete No: %d succeed!\n",num);
  n=n-1;
}
else
{
      printf("%d not been found!\n",num);
}
end:
return head;
}
struct student *increase(struct student *head)
{
struct student *p1,*p3;
p1=head;
p3=(struct student *)malloc(LEN);
      printf("请输入要插入的通讯信息:\n");
   printf("请输入ID号:");
   scanf("%d",&p3->id);
   printf("请输入姓名:");
   scanf("%s",&p3->name);
   printf("请输入性别:");
   scanf("%s",&p3->sex);
   printf("请输入手机号码:");
   scanf("%s",&p3->cellphone);
   printf("请输入QQ: ");
   scanf("%s",&p3->QQ);
   p3->next =p1;
   head=p3;
   printf("增添通讯录信息成功\n");
   return head;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-5 21:49:37 | 显示全部楼层
你的list写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-17 13:36:42 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 12:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表