搜索
查看: 1379|回复: 16
打印 上一主题 下一主题

求大神,线性表为啥实现不了?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-15 09:54:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>

#define  MAXSIZE 30

//struct definition
typedef struct
{
        char name[ MAXSIZE ];
    char num[ MAXSIZE ];
        int score ;
}seqList;
void seqList_Init(seqList L[],int *len);
void seqList_Insert(seqList L[] ,int i,int *len);
void seqList_Delete(seqList L[] ,int i,int *len);
void Output(seqList L[],int len);



void seqList_Init(seqList L[],int *len)
{
        int i;//局部变量,作用范围在子函数内部
        printf("input the number:",MAXSIZE);
        scanf("%d",len);
        printf("input the information(name number score) :\n",*len);
        for(i=0;i<=*len-1;i++)
        {        //printf("input information of %d(name,number,score):",i);
                fflush(stdin);
                scanf("%s%s%d",&L[i].name,&L[i].num,&L[i].score);
        }
}
void Output(seqList L[],int len)
{        int i;
        printf("length: %d\n",len);
        for(i=0;i<=len-1;i++)
        {       
        printf("   %s    %s %4d\n",L[i].name,L[i].num,L[i].score);
        }
}

void seqList_Insert(seqList L[],int *len)
{
        int i,j;
        printf("input location:");
        scanf("%d",&i);
        for(j=(*len)-1;j>=i;j--)//插入前数据挪位
        {        L[j+1]=L[j];//把第i个位置空出来,等待数据插入
        }
        printf("input information(name,number,socre):");
        scanf("%s %s %d",&L[i-1].name,&L[i-1].num,&L[i-1].score);
        (*len)++;
}

void seqList_Delete(seqList L[] ,int *len)
{
        int i,j;
        printf("input delete location:");
        scanf("%d",&i);
        for(j=i+1;j<=(*len)-1;j++)
        {        L[j-1]=L[j];
        }
        (*len)--;
}

int main()
{
        seqList a[10];
    int length;
        seqList_Init(a,&length);
        printf("current data:\n");
        Output(a,length);
        printf("current data(after insert):\n");
        seqList_Insert(a,&length);
        printf("current data(after delete):\n");
        seqList_Delete(a ,&length);
        getchar();
    return 0 ;
}

最佳答案

查看完整内容

从头改一遍 void seqList_Insert(seqList L[] ,int i,int *len); void seqList_Delete(seqList L[] ,int i,int *len); 这两个函数原型和下面函数定义冲突了 seqList_Insert(a,&length); seqList_Delete(a ,&length); 同样,后面的这两句要跟着改 printf("input the number:",MAXSIZE); 这句少了一个占位符?还是后面的MAXSIZE不需要? printf("input the information(name number score) :\n",*len); 这句一样的 ...
楼主新帖
楼主热帖
沙发
发表于 2014-4-15 09:54:03 | 只看该作者
本帖最后由 rosynirvana 于 2014-4-15 11:08 编辑

从头改一遍

void seqList_Insert(seqList L[] ,int i,int *len);
void seqList_Delete(seqList L[] ,int i,int *len);
这两个函数原型和下面函数定义冲突了
seqList_Insert(a,&length);
seqList_Delete(a ,&length);
同样,后面的这两句要跟着改

printf("input the number:",MAXSIZE);
这句少了一个占位符?还是后面的MAXSIZE不需要?

printf("input the information(name number score) :\n",*len);
这句一样的问题,前面的格式化字符串里没有占位符,后面却有一个变量

   fflush(stdin);
这句是未定义的,看上去也没必要,后面的scanf是自动跳过空白字符的,去掉


  1.   for(j=(*len)-1;j>=i;j--)//插入前数据挪位
  2.         {        L[j+1]=L[j];//把第i个位置空出来,等待数据插入
  3.         }
  4.         printf("input information(name,number,socre):");
  5.         scanf("%s %s %d",&L[i-1].name,&L[i-1].num,&L[i-1].score);
复制代码

这一段,想必是你把“第i个元素”和“下表是i的元素”搞混了

getchar();
一个getchar通常是没法暂停的,要多写几个
板凳
发表于 2014-4-15 10:15:08 | 只看该作者
你说的线性表到底是啥?哪本中文书上自创的名词?
是抽象数据结构还是具体数据结构?
如果是抽象数据结构,它支持哪几个操作?时间复杂度是什么?
地板
 楼主| 发表于 2014-4-15 10:30:22 | 只看该作者
rosynirvana 发表于 2014-4-15 10:15
你说的线性表到底是啥?哪本中文书上自创的名词?
是抽象数据结构还是具体数据结构?
如果是抽象数据结构 ...

是具体数据结构中的线性表
5#
发表于 2014-4-15 10:44:46 | 只看该作者
祥子 发表于 2014-4-15 10:30
是具体数据结构中的线性表

具体数据结构?那是哪种语言或哪种库里面的?
C或者它的标准库可是没有所谓线性表这种东西的……
6#
 楼主| 发表于 2014-4-15 10:54:56 | 只看该作者
rosynirvana 发表于 2014-4-15 10:44
具体数据结构?那是哪种语言或哪种库里面的?
C或者它的标准库可是没有所谓线性表这种东西的……

这是清华大学出版的《数据结构》C语言版里面的
7#
发表于 2014-4-15 10:59:31 | 只看该作者
祥子 发表于 2014-4-15 10:54
这是清华大学出版的《数据结构》C语言版里面的

你要考研吗?
不考研就别看那本书了
8#
 楼主| 发表于 2014-4-15 11:10:39 | 只看该作者
rosynirvana 发表于 2014-4-15 10:59
你要考研吗?
不考研就别看那本书了

这是我们的教材
9#
 楼主| 发表于 2014-4-15 11:12:28 | 只看该作者
谢谢你咯,我找到方法了
10#
发表于 2014-4-15 11:15:23 | 只看该作者
这段代码可以改成能运行的,但是没多少意义
这书和大多数中文统编教材一样,自己生造出一个完全没必要的粗浅概念
(线性表?不就是RAM上面的一片连续主存吗?或者直接说C上面的array不就行了?)
然后写的代码都是玩具级别的

seqList_Init要求输入一个表的最大长度,但是这个长度又完全不去检测有没有越界,那么把数组再封装一遍又有何意义呢?

这几个函数有重用的价值吗?没有的话为什么要专门写成一个函数呢?写到main里面明显可以更简洁的啊

当然,是为了演示,都是为了演示某个功能的玩具代码

结果一个玩具代码还写得这么凌乱不堪留下安全漏洞
11#
 楼主| 发表于 2014-4-15 15:39:48 | 只看该作者
rosynirvana 发表于 2014-4-15 11:15
这段代码可以改成能运行的,但是没多少意义
这书和大多数中文统编教材一样,自己生造出一个完全没必要的粗 ...

不是啊,这段代码可以说是这本书的精髓了,只是对这样的结构熟悉一下而已,所以里面有很多漏洞也没有去注意,检索和其他一些内存问题也没注意。我只是初学者,想弄懂问题而已
12#
发表于 2014-4-15 16:08:50 | 只看该作者
祥子 发表于 2014-4-15 15:39
不是啊,这段代码可以说是这本书的精髓了,只是对这样的结构熟悉一下而已,所以里面有很多漏洞也没有去注 ...

虽然那本书不值得看,但是这么简单的代码,怎么也说不上精髓
其实就是一个array基本操作

  1. /* Delete element at position pos */
  2. for(i=pos; i+1<length; ++i)
  3.   arr[i] = arr[i+1];

  4. /* Insert target at position pos */
  5. for(i=length-1; i>pos; --i)
  6.   arr[i] = arr[i-1];
  7. arr[pos] = target;
复制代码

初始化和输出更简单,学语言的时候一定会讲到,就不再写了
用最基本的array几行就写完了,偏偏用struct array,还要另外封装一个没有重用性的函数

初学者更应该学标准地道的语言和习惯写法,而不是跟着国内瞎掰出来的东西去学
13#
 楼主| 发表于 2014-4-15 16:13:55 | 只看该作者
rosynirvana 发表于 2014-4-15 16:08
虽然那本书不值得看,但是这么简单的代码,怎么也说不上精髓
其实就是一个array基本操作

你是大神啊!不懂我们这些学渣
14#
 楼主| 发表于 2014-4-15 16:16:30 | 只看该作者
祥子 发表于 2014-4-15 16:13
你是大神啊!不懂我们这些学渣

你说的那个struct是结构体,形式不一样啊。就像调用函数可以用指针也可以不用一样
15#
发表于 2014-4-15 21:45:36 | 只看该作者
rosynirvana 发表于 2014-4-15 16:08
虽然那本书不值得看,但是这么简单的代码,怎么也说不上精髓
其实就是一个array基本操作

我发现严蔚敏出版的那本数据结构有好多内容是抄袭别人的...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表