| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1632 人关注过本帖
标题:一个链表问题包含了节点的 插入 删除 自定义函数的输出 有点问题 大家帮帮 ...
取消只看楼主 加入收藏
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
一个链表问题包含了节点的 插入 删除 自定义函数的输出 有点问题 大家帮帮忙啊 3q了
1. 创建一个复杂数据(结构体)类型,该类型的变量能够存放一个学生的信息,包括:学号、姓名、性别以及三门课程的成绩(C程序设计、计算机科学导论和大学英语),要求性别用中文“男/女”表示。
2. 新建链表存放以下三个学生的信息(链表的每一个节点存放一个学生的信息,各节点以学号递增的顺序排列):
0764181057    林婷婷       87    90    78
0764181058    刘俊伟       99    65    56
0764181060    卢京京       80    90    96
3. 列出平均分高于80分的学生姓名,学号和平均成绩,如:
林婷婷 0764181057 85.0
4. 向链表中插入一个学生,插入完成后链表保持学号递增顺序不变,该生信息为:
0764181059    戴国锋       81    92    89
5. 从链表中删除“计算机科学导论”课程成绩低于70分的学生。
6.编写一个遍历输出该链表全体数据的函数,并在新建、插入、删除等操作后调用以验证程序的正确性。
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student {
    char num[15];
    char name[20];
    char sex[6];
    float score1;
    float score2;
    float score3;
    struct student*next;
};
int main() {
    void print(struct student*head);
    int n = 1;
    struct student *head, *p1, *p2,*p0;// 1     1到2 应该是在for 里面有问题 因为我输入一组数的时候有结果,输入两组的时候
    head = p1 = p2 = (struct student*) malloc(LEN);//就出现一个对话框了***。exe停止工作了
    p1->next = NULL;
    scanf("%s", p1->num);
    scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
            &p1->score3);
    for (;;) {
        if (n > 1)
            p2->next = p1;
        p2 = p1;
        n++;
        p1 = (struct student*) malloc(LEN);
        scanf("%s", p1->num);
        int n;
        n = atoi(p1->num);
        if (n == 0)
            break;
        scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
                &p1->score3);
    }
   print(head);//(输出开始时的信息)  2   2到3貌似也有问题
   p0=(struct student*) malloc(LEN);
   p0->next=NULL;
   printf("输入插入的学生信息\n");
    scanf("%s %s %s %f %f %f",p0->num, p0->name, p0->sex, &p0->score1, &p0->score2,
                &p0->score3);
    p1=head;
    for(;;p0=p0->next)
    {if(p1->next!=NULL&&p1->num<p0->num&&p1->next->num>p0->num)
        {p0->next=p1->next;
         p1->next=p0;
         break;}
    if(p1->next==NULL&&p1->num<p0->num)
    { p0=p1->next;
       p0->next=NULL;
    break;}
    if(head->num>p0->num)
        {p0->next=head;
        p0=head;
        break;}
    }
    print(head);//输出插入后的信息 3  3到4也是

    for(p2=head,p1=head->next;;p1=p1->next,p2=p2->next)
    {if(head->score2<70)
        head=head->next;
    if(p1->score2<70&&p1->next!=NULL)
        p2->next=p1->next;
    if(p1->score2<70&&p1->next==NULL)
        p2->next=NULL;
    }
    print(head);//(输出删除后的信息) 4

    return 0;
}
void print(struct student*head)//(这个是书上看的 没问题)
{    struct student*p1;
    p1 = head;
    if (p1 != NULL)
        do {
            printf("%s %s %s %.1f %.1f %.1f\n", p1->num, p1->name, p1->sex,
                    p1->score1, p1->score2, p1->score3);
            p1 = p1->next;
        } while (p1 != NULL);
}
搜索更多相关主题的帖子: 信息 姓名 计算机科学 C程序设计 结构体 
2011-12-04 02:50
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
回复 3楼 embed_xuel
看完老谭的书再编的
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student {
    char num[15];
    char name[20];
    char sex[6];
    float score1;
    float score2;
    float score3;
    struct student*next;
};
int main() {
    void print(struct student*head);//1   1到2 没问题了
    int n = 1;
    struct student *head, *p1, *p2,*p0;
    head = p1 = p2 = (struct student*) malloc(LEN);
    p1->next = NULL;//但是这里为什么要加这句呢
    scanf("%s", p1->num);
    scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
            &p1->score3);
    for (;;) {
        if (n > 1)
            p2->next = p1;
        p2 = p1;
        n++;
        p1 = (struct student*) malloc(LEN);
        p1->next=NULL;//还有这句   这是我听了他们的建议加的
        scanf("%s", p1->num);
        int a;
        a = atoi(p1->num);
        if (a == 0)
            break;
        scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
                &p1->score3);

    }
   print(head);//2
   p0=(struct student*) malloc(LEN);//重新开一个空间给要插入的p0
   printf("输入插入的学生信息\n");
    scanf("%s %s %s %f %f %f",p0->num, p0->name, p0->sex, &p0->score1, &p0->score2,
                &p0->score3);
    p1=head;
    for(;;p0=p0->next)//让p0后移
    {if(p1->next!=NULL&&p1->num<p0->num&&p1->next->num>p0->num)
        {p0->next=p1->next;
         p1->next=p0;
         break;}//插入节点到链表中间
    if(p1->next==NULL&&p1->num<p0->num)
    { p0=p1->next;
       p0->next=NULL;
    break;}//插入节点到链表的尾端
    if(head->num>p0->num)
        {p0->next=head;
        p0=head;
        break;}//头结点
    }
    print(head);

    for(p2=head,p1=head;;p2=p1,p1=p1->next)//3
    {if(head->score2<70)
        head=head->next;//删除头结点
    if(p1->score2<70&&p1->next!=NULL)
        p2->next=p1->next;//删除链表中间的节点
    if(p1->score2<70&&p1->next==NULL)
        p2->next=NULL;//删除最后一个节点
    }
    print(head);

    return 0;
}
void print(struct student*head)//4    这里没问题      void print(struct student*head)这句帮我解释下啊
{    struct student*p1;
    p1 = head;
    if (p1 != NULL)
        do {
            printf("%s %s %s %.1f %.1f %.1f\n", p1->num, p1->name, p1->sex,
                    p1->score1, p1->score2, p1->score3);
            p1 = p1->next;
        } while (p1 != NULL);
}
2011-12-04 09:25
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
回复 2楼 zy_space
哎 第一次编链表啊 真的找不出啊
2011-12-04 09:26
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
大家一起来帮帮忙啊
2011-12-04 12:27
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
大侠们来帮帮忙啊,有点急啊
2011-12-04 16:27
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
大侠们来帮帮忙啊,有点急啊
2011-12-04 20:00
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
#include <stdio.h>
 #include <malloc.h>
 #define LEN sizeof(struct student)
 struct student {
     char num[15];
     char name[20];
     char sex[6];
     float score1;
     float score2;
     float score3;
     struct student*next;
 };
 int main() {
     void print(struct student*head);//1   1到2 没问题了
    int n = 1;
     struct student *head, *p1, *p2,*p0;
     head = p1 = p2 = (struct student*) malloc(LEN);
     p1->next = NULL;//但是这里为什么要加这句呢
     scanf("%s", p1->num);
     scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
             &p1->score3);
     for (;;) {
         if (n > 1)
             p2->next = p1;
         p2 = p1;
         n++;
         p1 = (struct student*) malloc(LEN);
         p1->next=NULL;//还有这句   这是我听了他们的建议加的
         scanf("%s", p1->num);
         int a;
         a = atoi(p1->num);
         if (a == 0)
             break;
         scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
                 &p1->score3);
 
    }
    print(head);//2
    p0=(struct student*) malloc(LEN);//重新开一个空间给要插入的p0
    printf("输入插入的学生信息\n");
     scanf("%s %s %s %f %f %f",p0->num, p0->name, p0->sex, &p0->score1, &p0->score2,
                 &p0->score3);
     p1=head;
     for(;;p0=p0->next)//让p0后移
     {if(p1->next!=NULL&&p1->num<p0->num&&p1->next->num>p0->num)
         {p0->next=p1->next;
          p1->next=p0;
          break;}//插入节点到链表中间
     if(p1->next==NULL&&p1->num<p0->num)
     { p0=p1->next;
        p0->next=NULL;
     break;}//插入节点到链表的尾端
     if(head->num>p0->num)
         {p0->next=head;
         p0=head;
         break;}//头结点
     }
     print(head);
 
    for(p2=head,p1=head;;p2=p1,p1=p1->next)//3
     {if(head->score2<70)
         head=head->next;//删除头结点
     if(p1->score2<70&&p1->next!=NULL)
         p2->next=p1->next;//删除链表中间的节点
     if(p1->score2<70&&p1->next==NULL)
         p2->next=NULL;//删除最后一个节点
     }
     print(head);
 
    return 0;
 }
 void print(struct student*head)//4    这里没问题      void print(struct student*head)这句帮我解释下啊
 {    struct student*p1;
     p1 = head;
     if (p1 != NULL)
         do {
             printf("%s %s %s %.1f %.1f %.1f\n", p1->num, p1->name, p1->sex,
                     p1->score1, p1->score2, p1->score3);
             p1 = p1->next;
         } while (p1 != NULL);
 }
2011-12-04 20:48
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
大侠们  帮帮忙啊
2011-12-05 10:29
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:0 
这是我改好后的   谢谢大家的帮忙啊 thank you
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student {
    char num[15];
    long numb;
    char name[20];
    char sex[6];
    float score1;
    float score2;
    float score3;
    struct student*next;
};
int main() {
    void print(struct student*head);
    int n = 1;
    struct student *head, *p1, *p2, *p0;
    head = p1 = p2 = (struct student*) malloc(LEN);
    p1->next = NULL;
    scanf("%s", p1->num);
    scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
            &p1->score3);
    p1->numb = atoi(p1->num);
    for (;;) {
        if (n > 1)
            p2->next = p1;
        p2 = p1;
        n++;
        p1 = (struct student*) malloc(LEN);
        p1->next = NULL;
        scanf("%s", p1->num);
        p1->numb = atoi(p1->num);
        if (p1->numb == 0)
            break;
        scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
                &p1->score3);

    }
    printf("\n\n            输入的数据\n");
    print(head);
    for(p1=head;;p1=p1->next)
    {   float a ;
        a=p1->score1+p1->score2+p1->score3;
        if(a>=240)
            printf("\n%s %s %.1f\n",p1->num,p1->name,a/3);
        if(p1->next==NULL)
            break;
    }
    p0 = (struct student*) malloc(LEN);
    p0->next = NULL;
    printf("\n输入插入的学生信息\n");
    scanf("%s %s %s %f %f %f", p0->num, p0->name, p0->sex, &p0->score1,
            &p0->score2, &p0->score3);
    p0->numb = atoi(p0->num);
    for (p1 = head;; p1 = p1->next) {
        if (p1->next != NULL && p1->numb < p0->numb
                && p1->next->numb > p0->numb) {
            p0->next = p1->next;
            p1->next = p0;
            break;
        }
        if (p1->next == NULL && p1->numb < p0->numb) {
            p0 = p1->next;
            p0->next = NULL;
            break;
        }
        if (head->numb > p0->numb) {
            p0->next = head;
            p0 = head;
            break;
        }
    }
    printf("\n\n            插入后\n");
    print(head);
    for (p2 = p1 = head;; p2 = p1, p1 = p1->next) {
        if (head->score2 < 70)
             head = head->next;
        if (p1->score2 < 70 && p1->next != NULL)
             p2->next = p1->next;
        if (p1->score2 < 70 && p1->next == NULL)
             p2->next = NULL;
        if(p1->next==NULL)
            break;
    }
    printf("\n\n             删除后\n");
    print(head);
    return 0;
}
void print(struct student*head) {
    struct student*p1;
    p1 = head;
    if (p1 != NULL)
        do {
            printf("%s %s %s %.1f %.1f %.1f\n", p1->num, p1->name, p1->sex,
                    p1->score1, p1->score2, p1->score3);
            p1 = p1->next;
        } while (p1 != NULL);
}
2011-12-05 14:45
快速回复:一个链表问题包含了节点的 插入 删除 自定义函数的输出 有点问题 大 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037396 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved