鱼C论坛

 找回密码
 立即注册
查看: 3789|回复: 6

结构体与单链表的综合应用问题。

[复制链接]
发表于 2012-11-16 08:34:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学生的信息有 姓名,学号,成绩。要求 输出自己输入的学生信息, 输出名字为xx的学生信息,和分数为100的学生信息,最后把不及格的学生信息删除,输出删除后所有的学生信息。。谁能给个源代码?用c语言写······
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-16 08:51:55 | 显示全部楼层
我想把结构体作为一个单链表的数据域。。写完后不能调用··纠结好久了··
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-16 22:10:46 | 显示全部楼层
都没有人啊·!!~~~~~~~~~~~~~~~~~~~~~
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-17 12:38:17 | 显示全部楼层
:L:L:L:L:L:L 哎哎爱爱啊
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-12-7 17:19:26 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>


struct stud/*定义链表*/
{
        int data;
        struct stud *next;
};



void pai_xue(struct stud *head1,struct stud *head2,int count1,int count2)/*冒泡排序法*/
{

        int i,j,temp=0;
        struct stud *p;

        for(i=0;i<count1-1;++i)
                for(p=head1->next;p->next!=NULL;p=p->next)/*对链表1进行排序*/
                {
                        if(p->data>p->next->data)
                        {
                                temp=p->data;
                                p->data=p->next->data;
                                p->next->data=temp;
                        }
                }

                for(i=0;i<count2-1;++i)
                        for(p=head2->next;p->next!=NULL;p=p->next)/*对链表2进行排序*/
                        {
                                if(p->data>p->next->data)
                                {
                                        temp=p->data;
                                        p->data=p->next->data;
                                        p->next->data=temp;
                                }
                        }

                        printf("\n链表1排完序后\n");/*输出链表1和2*/
                        p=head1->next;
                        while(p)
                        {
                                printf("%d ",p->data);
                                p=p->next;
                        }
                        printf("\n");

                        printf("\n链表2排完序后\n");
                        p=head2->next;
                        while(p)
                        {
                                printf("%d ",p->data);
                                p=p->next;
                        }
                        printf("\n");
                        printf("\n");

}

int main()
{


        struct stud *head1,*head2,*p,*q,*head3;
        int count1=1,count2=1;

        head3=(struct stud *)malloc(sizeof(struct stud *));/*定义链表头结点,并分配空间*/
        head3->next=NULL;

        head1=(struct stud *)malloc(sizeof(struct stud *));
        head2=(struct stud *)malloc(sizeof(struct stud *));
        p=(struct stud *)malloc(sizeof(struct stud *));
        q=(struct stud *)malloc(sizeof(struct stud *));

        head1->next=NULL;
        head2->next=NULL;

        printf("输入一个数据以999结束\n");
        scanf("%d",&p->data);

        while(p->data!=999)/*链表1输入数据*/
        {

                count1++;
                p->next=head1->next;
                head1->next=p;
                printf("输入一个数据以999结束\n");
                p=(struct stud *)malloc(sizeof(struct stud *));
                scanf("%d",&p->data);

        }


        printf("现在开始给第二个链表输入数据\n");

        printf("输入一个数据以999结束\n");
        scanf("%d",&q->data);

        while(q->data!=999)/*链表2输入数据*/
        {

                count2++;
                q->next=head2->next;
                head2->next=q;
                printf("输入一个数据以999结束\n");
                q=(struct stud *)malloc(sizeof(struct stud *));
                scanf("%d",&q->data);

        }


        pai_xue(head1,head2,count1,count2);


        head1=head1->next;
        head2=head2->next;
        while(head1!=NULL&&head2!=NULL)  /*将排序好的链表1和2 的数据导入链表3*/
        {
                if(head1->data<=head2->data)
                {
                        p=head1->next;

                        head1->next=head3->next;
                        head3->next=head1;


                        head1=p;
                }

                else
                {
                        q=head2->next;

                        head2->next=head3->next;
                        head3->next=head2;


                        head2=q;
                }
        }



        if(head1!=NULL)/*如果有链表1或2的数据不为空,将剩下的数据导入链表3中*/
        {


                p=head1;
                while(p!=NULL)
                {
                        q=p->next;
                        p->next=head3->next;
                        head3->next=p;
                        p=q;
                }

        }
        if(head2!=NULL)
        {

                q=head2;
                while(q!=NULL)
                {
                        p=q->next;
                        q->next=head3->next;
                        head3->next=q;
                        q=p;
                }

        }



        q=head3->next;//将链表倒置,原来是由大到小,倒置成由小到大
        head3->next=NULL;
        while(q!=NULL)
        {
        p=q->next;
        q->next=head3->next;
        head3->next=q;
        q=p;
        }

        printf("两个链表合并后由小到大为\n");

        p=head3->next;
        while(p)
        {
                printf("%-4d",p->data);
                p=p->next;
        }
        printf("\n");

        system("pause");
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-12-7 17:20:06 | 显示全部楼层
发错了:D:(:(:(:(:(:(:(
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-12-7 17:21:08 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


struct student
{
    char name[11];
    int no;
    int score;
};
typedef struct node
{
    struct student data;
    struct node *next;
}ListNode,*LinkList;

LinkList CreateList(int n)
{//创建链表。
    LinkList head;
    ListNode *p,*q;  int i;
    head=(ListNode *)malloc(sizeof(ListNode));
    p=head;

    for(i=1;i<=n;i++)
    {
        q=(ListNode *)malloc(sizeof(ListNode));
        printf("请输入第%d个学生的姓名,学号和成绩:\n",i);
        scanf("%s%d%d",q->data.name,&q->data.no,&q->data.score);
        p->next=q;
        p=q;
    }
    printf("\n\n");
        p->next=NULL;
        return head;
}

void show_ww(LinkList head,int n)
{//输出名字叫ww的学生信息。
    int i;
    LinkList h;
    h=head->next;
     printf("姓名是ww的学生信息:\n");
    for(i=0;i<n;i++)
    {

        if((strcmp(h->data.name,"ww"))==0)
        {

            printf("姓名:%3s;  学号:%3d;  成绩:%3d\n",h->data.name,h->data.no,h->data.score);
            h=h->next;
        }

    }
     printf("\n\n");
}

void show_100(LinkList head,int n)
{//输出分数为100的学生信息。
    int i;
    LinkList h;
    h=head->next;
    printf("成绩为100分的学生信息:\n");
    for(i=1;i<=n;i++)
    {
        if(h->data.score==100)

            printf("姓名:%3s;  学号:%3d;  成绩:%3d\n",h->data.name,h->data.no,h->data.score);
            h=h->next;
    }
    printf("\n\n");

}

void Delete_low(LinkList head)
{//删除低于60分的学生信息。
    ListNode *q,*p;

    p=head;
    while(p->next!=NULL)
    {
        q=p->next;
        if(p->next->data.score<60)
        {
            p->next=q->next;
            free(q);
        }
        else
            p=p->next;
    }

}

void Show_del(LinkList head)
{//输出删除低于60分的学生。


        ListNode *p;
        p=head->next;
        printf("成绩大于60分的学生信息:\n");
        while(p!=NULL)
        {

                printf("姓名:%3s;  学号:%3d;  成绩:%3d",p->data.name,p->data.no,p->data.score);
                p=p->next;
                printf("\n");
        }
        printf("\n\n");

}

int main()
{
    int n;
    LinkList H;
    printf("请输入学生总数:\n");
    scanf("%d",&n);
    H=CreateList(n);
    show_ww(H,n);
    show_100(H,n);
    Delete_low(H);
    Show_del(H);

    return 0;
    system("pause");

}
:funk::funk::funk::funk::funk::funk::funk::funk::funk::funk::funk:
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-16 08:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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