注册 登录
编程论坛 数据结构与算法

初学者求助,急啊

木头lbj 发布于 2011-03-09 14:55, 554 次点击
刚接触数据结构,对于如何编实现算法操作感到很迷惑。下面是我写的删除顺序表中一个值为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]);
}
4 回复
#2
寒风中的细雨2011-03-09 16:28
程序代码:
#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]);
}
#3
木头lbj2011-03-09 18:36
回复 楼主 木头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次。
这是什么原因啊?
#4
诸葛修勤2011-03-09 22:55
            for( int k=j;  k< l.length-1; ++k )
            {
                l.data[k] = l.data[k+1];
            }
把 j 改成 k
就ok
#5
木头lbj2011-03-10 13:13
回复 3楼 木头lbj
嗯嗯  成功了。原来是循环错了。。。。谢谢啊
1