| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 488 人关注过本帖
标题:关于结构体顺序表存储另结构体的代码有一些小问题不懂,求大神解答
只看楼主 加入收藏
zggdsgs
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-4-6
结帖率:100%
收藏
 问题点数:0 回复次数:0 
关于结构体顺序表存储另结构体的代码有一些小问题不懂,求大神解答
不懂的都在下面标注了。这里再说一下,不知道为什么要用到place函数和move函数,还有creat函数里j=!(l->length)?0:place(l,c,num)的意思。为什么不能删除place和move函数然后在creat函数里面直接输入结构体信息?如果不用place和move函数该怎么实现存放学生信息的结构体?
#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
typedef struct {
    int cla;
    int num;
    char name[20];
    char sex;
    long phonenum;
}student;
typedef struct{
    student *elem;
    int length;
    int sum;
}ST;
ST *initlist(){
    ST *l;
    l=(ST*)malloc(sizeof(ST));
    if(!l)printf("没有创建ST!\n");
    l->length=0;l->sum=10;
    l->elem=(student*)malloc(10*sizeof(student));
    if(!l->elem)printf("没有创建elem!\n");
    return(l);
}

int place(ST *l,int c,int num){//不知道这个函数和下一个函数的作用
    int low,high,mid,j=-1,i;
    low=0;high=l->length-1;
    while(low<=high){
        mid=(low+high)/2;
        if(l->elem[mid].num>num)high=mid-1;
        else {j=mid;low=mid+1;}
    }i=j;
    for(j=mid;j>=i;j--){
        if(j==-1||num>l->elem[j].num)break;
        else
            if(num==l->elem[j].num&&c>l->elem[j].cla)break;}
    return(++j);
}
void move(ST *l,int j){
    int i;
    for(i=l->length-1;i>=j;i--){
        l->elem[i+1].cla=l->elem[i].cla;
        strcpy(l->elem[i+1].name,l->elem[i].name);
        l->elem[i+1].num=l->elem[i].num;
        l->elem[i+1].sex=l->elem[i].sex;
        l->elem[i+1].phonenum=l->elem[i].phonenum;
    }
}
void createlist(ST *l){
    int i,j,c,num;
    char nam[20],s;long p;
    printf("输入学生信息(class name num sex phonenum):\n");
    for(i=0;i<l->sum;i++){
        flushall();
        scanf("%d %s %d %c %ld",&c,nam,&num,&s,&p);//为什么不能把place,move函数和下面的删除然后把scanf改成下面那样(试过但输出乱码)?
              //scanf("%d%s%d%c%ld",&l->elem[i].cla,&l->elem[i].name,&l->elem[i].num,&l->elem[i].sex,&l->elem[i].phonenum);
        j=!(l->length)?0:place(l,c,num);//这个是什么意思
        move(l,j);
        l->elem[j].cla=c;
        strcpy(l->elem[j].name,nam);
        l->elem[j].num=num;
        l->elem[j].sex=s;
        l->elem[j].phonenum=p;
        l->length++;
    }
}

void printlist(ST *l){
    int i,j=0;
    printf("当前表中信息如下:class/name/num/sex/phonenum\n");
    for(i=0;i<l->sum;i++){
        printf("class:%d,name:%s,num:%d,sex:%c,phonenum:%ld\n",l->elem[i].cla,l->elem[i].name,l->elem[i].num,l->elem[i].sex,l->elem[i].phonenum);
        if(++j==10){j=0;printf("\n");
        }
    }
    printf("\n");
}
void main(){
    ST *l;
    printf("class1\n");
    l=initlist();
    createlist(l);
    printlist(l);
   
}
搜索更多相关主题的帖子: include 结构体 信息 
2015-06-14 16:57
快速回复:关于结构体顺序表存储另结构体的代码有一些小问题不懂,求大神解答
数据加载中...
 
   



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

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