| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:初学者求助,急啊
只看楼主 加入收藏
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
初学者求助,急啊
刚接触数据结构,对于如何编实现算法操作感到很迷惑。下面是我写的删除顺序表中一个值为x的元素的c程序,能通过编译但是不能运行得到最后结果。麻烦各位看看,不吝赐教啊。
#include <stdio.h>
#include <math.h>
#define max_size 100
typedef struct
{
    int data[max_size];
    int length;
}seqlist;

void creatlist(seqlist &l,int n)  //创建顺序表
{
    printf("输入建立%d个数据的线性表!\n",n);
    for(int i = 0;i <= n;i ++)
    {
        scanf("%d",&l.data[i]);
    }
    l.length = n;
}

void deleteV_seq(seqlist &l,int x) //删除数据
{
    for(int j = 0;j < l.length - 1;j ++)
    {
        printf("输入想要删除的数据:");
        scanf("%d",&x);
        if (l.data[j-1] == x)
        {
            l.data[j-1] = l.data[j];
            l.length --;
            printf("删除的数据为%d",l.data[j-1]);
        }        
    }
}

void main()
{
    int k;
    seqlist l;
    creatlist(l,10);
    for(k =0;k < l.length;k ++)
        printf("%3d",l.data[k]);
    deleteV_seq(l,5);
    for(k =0;k < l.length;k ++)
        printf("%3d",l.data[k]);
}
搜索更多相关主题的帖子: 线性表 元素 
2011-03-09 14:55
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <math.h>
#define max_size 100
typedef struct
{
    int data[max_size];
    int length;
}seqlist;

void creatlist(seqlist &l,int n)  //创建顺序表
{
    printf("输入建立%d个数据的线性表!\n",n);
    for(int i = 0;i < n;i ++)
    {
        scanf("%d",&l.data[i]);
    }
    l.length = n;
}

void deleteV_seq(seqlist &l,int x) //删除数据
{
    for(int j = 0;j < l.length; )
    {
        if (l.data[j] == x)
        {
            for( int k=j;  k< l.length-1; ++k )
            {
                l.data[j] = l.data[j+1];
            }
            //l.data[j-1] = l.data[j];
            l.length --;
            //printf("删除的数据为%d",l.data[j-1]);
        } 
        else
        {
            ++j;
        }
    }
}

void main()
{
    int k;
    seqlist l;
    creatlist(l,10);
    for(k =0;k < l.length;k ++)
        printf("%3d",l.data[k]);

    deleteV_seq(l,5);
    for(k =0;k < l.length;k ++)
        printf("%3d",l.data[k]);
} 
2011-03-09 16:28
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:0 
回复 楼主 木头lbj
谢谢啊    解决的大问题了。
但是还是有错误。我想不明白。
假如删除含5个数据的顺序表中的5,用键盘输入产生1 5 2 3 4的表,运行后却输出 1 2 2 3而不是应该得到的1 2 3 4.
但是如果是输入 1 2 3 5 4能得到1 2 3 4.
一旦要删除的元素后面超过两个元素,紧跟着被删除元素后面的元素会被输出2次。
这是什么原因啊?

。。。!!!)))000
2011-03-09 18:36
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:10 
            for( int k=j;  k< l.length-1; ++k )
            {
                l.data[k] = l.data[k+1];
            }
把 j 改成 k
就ok
2011-03-09 22:55
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:0 
回复 3楼 木头lbj
嗯嗯  成功了。原来是循环错了。。。。谢谢啊

。。。!!!)))000
2011-03-10 13:13
快速回复:初学者求助,急啊
数据加载中...
 
   



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

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