| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1223 人关注过本帖
标题:新手在用链表输出学生信息时遇到的问题,求助大家!
只看楼主 加入收藏
铃铛侠
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-9-4
结帖率:66.67%
收藏
 问题点数:0 回复次数:1 
新手在用链表输出学生信息时遇到的问题,求助大家!
我在输出学生信息的时候发现,只有最后一排数据元素输出了,前面的都是乱码,真的不知道是怎么回事...希望路过的大神能教教我
还有那个insert function好像也有问题,能帮我看看吗?谢谢啦
程序代码:
#include<stdio.h>
#include<string.h>
#define ERROR 0
#define OK 1



typedef struct Student
{
    char no[4];
    char name[8];
    int price;
}Student;

typedef struct Lnode
{
    Student data;
    struct Lnode *next;
}Lnode, *LinkList;

int i, j;



int InitList(LinkList * addr_L)
{  *addr_L=(LinkList)malloc(sizeof(Lnode));
   if (!(*addr_L))  return -2;
   (*addr_L)->next= NULL;
   return OK;
}


int CreateList(LinkList *L,Student e,int n)//创建链表
{
        
    LinkList p;
    *L = (LinkList)malloc(sizeof(Lnode));
    (*L)->next = NULL;
    Lnode *r;
    r = L;

    for (j = 0; j<n; j++)
    {
        p = (LinkList)malloc(sizeof(Lnode));
        scanf("%s %s %d",p->data.no,p->data.name,&p->data.price);
          e = p->data;
        p->next = NULL;
        r->next = p;
    
    }
    return OK;
}


/*void OutList(LinkList L,int n)//逐个显示表中的元素
{
    Lnode *p;
    p=L;
    j=0;
    while(p&&j<n)
    {
        printf("%s %s %d\n",p->data.no,p->data.name,p->data.price);
        p=p->next;
        ++j;
    }
  return OK;
}*/

void DisplayElem(LinkList L)//逐个显示表中的元素
{
    Lnode *p=L;
    while (p!=NULL)
    {
        printf("%s %s %d\n", p->data.no, p->data.name, p->data.price);
        p = p->next;
    }
    return 0;
}



int Insert()
{
    LinkList L;
    LinkList p,pre;//
    p=L;
    LinkList s;
    s=(LinkList)malloc(sizeof(struct Lnode));
    struct Student NewElement;
    printf("请输入学生学号,姓名,成绩:");
    scanf("%s %s %d", NewElement.no,NewElement.name,&NewElement.price);
    s->data=NewElement;
    s->next=NULL;

    if(L->data.no==-1)
    {
        L->data=NewElement;
        return 0;
    }
    int i;
    for (i = 0; p!=NULL; i++) {
        if (p->data.no > s->data.no)
            break;
        pre=p;
        p=p->next;

    }
    if(p==L)
    {
        s->next=L;
        L=s;
    }
    else if(p==NULL)
    {
        pre->next=s;
    }
    else
    {
        pre->next=s;
        s->next=p;
    }
    return 0;
}

int main()
{
    int choice,k,i;
    Student e;
    LinkList L;


     printf("\n********************************\n\n");  
     puts("1. 构造顺序表并录入学生信息");    
     puts("2. 显示学生信息");  
     puts("3. 插入学生信息");
     puts("0. 退出");
     printf("\n********************************\n\n");  
     
    
    while(1)  
    {   
        
        puts("请选择:");  
        scanf("%d",&choice);  
        if(choice==0)  
         break;  
        switch(choice)  
        {  
            case 1:  
                    if (InitList(&L))
                         printf("初始化链表成功\n");
                     else
                         printf("初始化链表失败\n");
                    printf("请输入学生个数:\n");
                      scanf("%d", &k);
                    printf("请输入学生信息:学号 姓名 成绩\n");
                    if (CreateList(L,e,k))
                    printf("创建成功\n");
                    else
                     printf("创建失败\n");
                    break;  
            case 2:  
                   printf("输出每个同学的成绩:\n");
                   DisplayElem(L);
                     break;  
            case 3:
                   if (Insert(L))
                     printf("插入成功\n");
                   else
                   printf("插入失败\n");
            break;
       } 
      } 
               printf("\n\n谢谢您的使用,请按任意键退出\n\n\n");  
               system("pause");  
               return 0;  

    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: function insert 信息 元素 
2017-04-08 17:23
铃铛侠
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-9-4
收藏
得分:0 
插入学生信息是将信息插入后表仍然有序
2017-04-08 17:27
快速回复:新手在用链表输出学生信息时遇到的问题,求助大家!
数据加载中...
 
   



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

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