| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1254 人关注过本帖
标题:设顺序表L中的数据元素递增有序,试编写算法删除表中所有大于k1而小于k2的元 ...
只看楼主 加入收藏
李萧萧
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-3-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
设顺序表L中的数据元素递增有序,试编写算法删除表中所有大于k1而小于k2的元素(k1<k2)
#include<stdio.h>
#include<stdlib.h>
#define MAX 10

typedef struct
{int *data;
int last;
} Seqlist;//定义一个顺序表:seqlist L

int init_Seqlist(Seqlist *L)
{
L->data=(int*)malloc(MAX*sizeof(int));
L->last=0;
return 1;
}

Seqlist delete_Seqlist(Seqlist *L,int k1,int k2)
{int i=0,j;
if(k1>=k2||k1>L->data[MAX-1]||k2<L->data[0])
printf("输入错误!");
else
 while(L->data[i]<=k1)
i++;//从i开始一直删除
j=i;
while(j<MAX)
{if(L->data[j]<=k2)
 j++;//从j开始后面的数保留
for(j;j<MAX;j++)
{L->data[i]=L->data[j];
L->last--;}
}
return *L;
}

Seqlist *L;
int main()
{int init_Seqlist(Seqlist *L);
int i=0,k1,k2;
for(i=0;i<MAX;i++)
L->data[i]=i;
printf("请输入k1,k2:\t");
scanf("%d%d",&k1,&k2);
delete_Seqlist(L,k1,k2);
for(i=0;i<L->last;i++)
printf("删除后的链表为:%d",L->data[i]);
return 0;
}求教大神帮看看哪里错了,编译没有报错,就是执行不了。。。
搜索更多相关主题的帖子: include return 元素 
2014-03-19 20:51
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
收藏
得分:10 
? 这样都不会报错?
if(k1>=k2||k1>L->data[MAX-1]||k2<L->data[0])
    printf("输入错误!");
else
    while(L->data[i]<=k1)
    i++;//从i开始一直删除
 else 和while的大括号呢?
int init_Seqlist(Seqlist *L); 有这样调用函数的?

建议你贴代码时先贴好点吧  这样不会有人看的
2014-03-19 21:31
李萧萧
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-3-19
收藏
得分:0 
这是数据结构第一次作业。。。根本就是蒙啊,求指导!确实是没有报错
2014-03-19 22:51
李萧萧
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-3-19
收藏
得分:0 
回复 2楼 linkang1024
else,while都是只让它执行一步的。。。
2014-03-19 22:53
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
收藏
得分:0 
回复 4楼 李萧萧
等等吧  中午有空再帮 你看下,我也不是很懂的
2014-03-20 09:29
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:10 
按lz的逻辑,错误出现在这里。
for(j;j<MAX;j++)
{
    L->data[i]=L->data[j];
    L->last--;
}
少了i++;
还有一个问题,就是L->data[j]覆盖L->data[i]后应该清楚,按lz意思,应该补充
L->data[j] = 0;
2014-03-20 10:02
李萧萧
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-3-19
收藏
得分:0 
回复 6楼 fragileeye
好像还是老样子,依旧是只编译成功,运行不了,我都愁一天了。
2014-03-20 17:45
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define LIST_INIT_SIZE 100     //max size
#define LISTINCREMENT 10    //add size
typedef int ElemType;
struct SQLIST
{
    ElemType *elem;        //the address
    int length;        //current size
    int listsize;        //current memory
};
//init list
int InitList(struct SQLIST *L)
{
    L->elem = (ElemType *)malloc(sizeof(ElemType) * LIST_INIT_SIZE);
    if(!L->elem)
        perror("malloc error");
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return 1;
}
void DeleteList(ElemType key1, ElemType key2, struct SQLIST *L)
{
    int i,j = 0;
    int k;
    int len = L->length;
    if(key1 < key2 || key1 > L->elem[0] || key2 < L->elem[len])
    {
        for(i = 0; i< len; i++)
        {
            if(L->elem[i] > key1 && L->elem[i] < key2)
            {
                for(k=i;k<len;k++)
                    L->elem[k] = L->elem[k+1];
                len--;
                i--;
            }
        }
    }
    /*else if(key1 > key2 || key1 < L->elem[length] || key2 > L->elem[0])
    {
        while(L->elem[i] > key2 && L->elem[i] < key1)
        {
            L->elem[i] = L->elem[i+1];
            i++;
        }
    }*/
    L->length = len;  //last length;
}
int main(void)
{
    int i, j;
    int array[]= {1,2,3,4,5,6,7,8,9,10};
    struct SQLIST SqList;

    if(InitList(&SqList) != 1)
        perror("init error");

    for(i=0; i<sizeof(array)/sizeof(ElemType);i++)
        SqList.elem[i] = array[i];

    SqList.length = sizeof(array)/sizeof(ElemType);
    DeleteList(3, 8, &SqList);

    for(j=0;j<SqList.length; j++)
        printf("%d", SqList.elem[j]);

    return 0;
}
这是我自己写的 你参考下吧  有不懂的再来问我吧!
2014-03-21 09:32
李萧萧
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-3-19
收藏
得分:0 
回复 8楼 linkang1024
多谢了!,不过有个问题,不能直接给L->length赋初值么?让他直接等于MAXSIZE?
2014-03-21 15:58
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
收藏
得分:0 
回复 8楼 linkang1024
length是指当前的元素的长度, 后面的操作都需要计算出来的 ,不能直接赋值,你好好看一下吧!
2014-03-21 16:09
快速回复:设顺序表L中的数据元素递增有序,试编写算法删除表中所有大于k1而小于 ...
数据加载中...
 
   



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

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