回 帖 发 新 帖 刷新版面

主题:[讨论]我不知道哪里出了错误,大家帮忙看看吧,谢了

要求:
建立一个结点值为学生姓名和成绩的链表,最少要有5个结点。然后在任意位置进行插入结点、删除某人的结点操作。每次操作后要有输出。
下面是我编的但是好像不能运行!
#include<stdio.h>

#include<malloc.h>


typedef struct Node
{
    int number;
    char name;
    struct Node *next;
}Node,*LinkList;

void CreateLink(LinkList L)
{
    Node *r,*s;
    int flag=1;
    r=L;
    char c;
    int i;
    while(flag)
    {
        printf("输入c,i\n");
        c=getchar();
        scanf("%d",&i);
        if(c!='$')
        {
            s=(Node *)malloc(sizeof(Node));
            s->name=c;
            s->number=i;
            r->next=s;
        }
        else
        {
            flag=0;
            r->next=NULL;
        }
    }
}


void display(LinkList head)
{
    Node *p;
    p=head->next;
    while(p)
    {
        printf("number:%d  name:%c\n",p->number,p->name);
        
        p=p->next;
    }
    printf("\n");
}



void Locate( LinkList head,char z)//*查找
{
    Node *p;
    p=head->next;
    while(p!=NULL)
        if(p->name!=z)
            p=p->next;
        else
            break;
        printf("%c",p->number);
}

void InsList(LinkList L,int i,int j,char b)//*插入
{
    Node *pre,*s;
    int k;
    if(i<1) printf("不存在");
    pre=L;k=0;
    while(pre!=NULL&&k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(!pre)
    {
        printf("插入位置不合理");
    }
    s=(Node *)malloc(sizeof(Node));
    s->name=b;
    s->number=j;
    s->next=pre->next;
    pre->next=s;
    display(L);
}


void DelList(LinkList L,int i)//*删除
{
    Node *pre,*r;
    int k;
    int j;
    char c;
    pre=L;k=0;
    while(pre->next!=NULL&&k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(!(pre->next))
    {
        printf("删除结点的位置不合理");
    }
    r=pre->next;
    pre->next=pre->next->next;
    j=r->number;
    c=r->name;
    free(r);
    display(L);
}


void main()
{
    Node *head;
    int a;
    CreateLink(head);
    display(head);
    printf("要执行什么?1查找 2插入 3删除\n");
    scanf("%d",&a);
    switch(a)
    {
      case 1:
          char b;
          printf("要查找人的名字b=");
          scanf("%c",&b);
          Locate(head,b);
          break;
       case 2:
          int i,j;
          char c;
          printf("要插入的位置i=\n,插入学生的名字c=\n分数j=\n");
          scanf("%d",&i);
          scanf("%d",&j);
          scanf("%c",&c);
          InsList(head,i,j,c);
          break;
      case 3:
          int r;
          printf("要删除的位置i\n");
          DelList(head,i);
          break;
    }
}

回复列表 (共4个回复)

沙发

单步调试啊。。
只要思路正确就OK了。

板凳

typedef struct Node
{
    int number;
    char name;          //名字只有一个字符?晕
    struct Node *next;
}Node,*LinkList;

3 楼

不是名字只有一个字符,是我不知道若把名字弄个字符串,后面该怎么做!?
你如果知道,帮忙解决一下啦!谢了!

4 楼

typedef struct Node
{
    int number;
    char szName[11];          //名字最长5个汉字,10个字符,最开始的时候, 
                          //最好memset(xx->szName, 0, 11)
    struct Node *next;
}Node,*LinkList;

我来回复

您尚未登录,请登录后再回复。点此登录或注册