synchronized 发表于 2012-4-1 18:27:08

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

#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;
char sex;
char cellphone;
char QQ;
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;
}

20091225 发表于 2012-4-5 21:49:37

你的list写错了

y290176346 发表于 2015-9-17 13:36:42

我是来领鱼币的
页: [1]
查看完整版本: 输入ID限制为整数,我删除操作后,为什么就是不能删除第一个节点,插入也是一样没有OK