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

删除线性表中所有小于小于x的元素,我不知道我的代码哪里错,帮忙改改好吗?

支风儿 发布于 2013-05-02 12:37, 607 次点击
#include<stdio.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10
#define ERROR 0
#define OK   1
#define ElemType int

typedef struct
{
    ElemType *elem;
    int length;
    int listsize;
}Sqlist;

int InitList_Sq(Sqlist &L)   //构造线性表
{   int n,i;
   scanf("%d",&n);
    L.elem=(ElemType*)malloc(n*sizeof(ElemType));
    if(!L.elem)
      return ERROR;
    L.length=0;
    L.listsize=n;
    for(i=0;i<n;i++)
    {scanf("%d",&L.elem[i]);
    L.length++;}
    return OK;
}
int ListDelete_Sq1(Sqlist &L,int i,ElemType &e)   //删除第I个元素,用E返回其值
{
    ElemType *q,*p;
    if(i<1||(i>L.length))
    return ERROR;
    p=&(L.elem[i-1]);
    e=*p;
    q=L.elem+L.length+1;
    for(++p;p<=q;++p)
    *(p-1)=*p;
    --L.length;
    return OK;
}

int ListDelete_Sq2(Sqlist &L,ElemType &e)
{   int i;

    for(i=0;i<L.length;i++)
    {
        if(L.elem[i]<e)
        {
            ListDelete_Sq1(L,i,e);
            L.length--;
        }
    }
    return OK;

}


int ListLoad_Sq(Sqlist &L)
{
    int i;
    for(i=0;i<L.length;i++)
    printf("%d ",L.elem[i]);
    return OK;
}

int main(void)
{
    Sqlist L;
    int x;
    InitList_Sq(L);
    ListLoad_Sq(L);
    scanf("%d",&x);
    ListDelete_Sq2(L,x);
    ListLoad_Sq(L);
    return OK;
}
2 回复
#2
邓士林2013-05-02 15:22
int InitList_Sq(Sqlist &L)   //构造线性表
{   int n,i;
   scanf("%d",&n);
    L.elem=(ElemType*)malloc(n*sizeof(ElemType));
    if(!L.elem)
      return ERROR;
    L.length=0;
    L.listsize=n;
    for(i=0;i<n;i++)
    {scanf("%d",&L.elem[i]);
    L.length++;}
    return OK;
}
int ListDelete_Sq1(Sqlist &L,int i,ElemType &e)   //删除第I个元素,用E返回其值
{
    ElemType *q,*p;
    if(i<1||(i>L.length))
    return ERROR;
    p=&(L.elem[i-1]);
    e=*p;
    q=L.elem+L.length+1;
    for(++p;p<=q;++p)
    *(p-1)=*p;
    --L.length;
    return OK;
}
问题就处在这里的处理,你的长度在减少两个函数中都减少,还有就是i在增加,然后你用数组下标去标注,肯定会出现i比长度还大的
#3
支风儿2013-05-02 23:44
回复 2楼 邓士林
谢谢你的指导,我改过来了哈。。。谢谢
1