| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 411 人关注过本帖
标题:顺序表数据删除问题求助
只看楼主 加入收藏
on1y_rL
Rank: 1
等 级:新手上路
帖 子:5
专家分:6
注 册:2012-10-3
结帖率:100%
收藏
已结贴  问题点数:8 回复次数:4 
顺序表数据删除问题求助
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100  //定义线性表的最大长度

typedef struct    //定义顺序表结构
{
    DATA ListData[MAXSIZE+1]; //保存顺序表的数组
    int ListLen;              //顺序表已存结点 的数量
}SeqListType;
int SeqListDelete(SeqListType *SL,int n)  //删除顺序表中的数据元素
{
    int i;
    if(n<1 || n>SL->ListLen+1)  //删除元素序号不正确
    {
        printf("删除结点序号错误,不能删除结点!\n");
        return 0;              //返回0,表示删除不成功
    }
    for(i=n;i<SL->ListLen;i++)  //将顺序表中的数据向前移动
        SL->ListData[i]=SL->ListData[i+1];
    SL->ListLen--;               //顺序表元素数量减1
    return 1;                   //返回成功删除  
}
这个是我看的一本书上的代码,我想不明白if(n<1 || n>SL->ListLen+1) 这个不应该是if(n<1 || n>SL->ListLen) 吗?还有就是,假如删除的是最后一个元素的话,那就进不了for(i=n;i<SL->ListLen;i++)  这个循环了。但SL->ListLen--长度减1了,但其实最后一个元素不是还在SL->ListData这个数组里面吗?不是还占有一个位置吗?怎么样才能真正的删除掉?求帮助,谢谢..
搜索更多相关主题的帖子: 元素 return include 线性表 
2012-10-11 23:34
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:8 
这个程序,你仔细看看它的建立的时候,它应该是将 ListData[0]用来存放了这个数组的大小(我的理解哈,建议再看看程序...)....
意思说在存数据的时候,它是从ListData[1]开始的存储的, ListLen这是已存的数量,则数组的下标是:ListLen+1(存的最后一个数据)

第二个问题:首先你得清楚数组的特点,在删除时,数据依然在该数组中,它依然占据空间....这就是数组的劣势...如果要进行真正意义的删除...就使用链表吧....
2012-10-12 09:29
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
  同意楼上的说法
2012-10-12 10:18
on1y_rL
Rank: 1
等 级:新手上路
帖 子:5
专家分:6
注 册:2012-10-3
收藏
得分:0 
回复 2楼 爱闹的娃
ListData[MAXSIZE+1]这个的确是+1了,假设它没+1,从0开始,那它最后的一个元素不是ListData[ListLen-1]吗?
那它+1了,这样最后一个元素应该是在ListData[ListLen]吧?初始化的时候ListLen=0。
2012-10-12 13:55
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
回复 4楼 on1y_rL
对的....
2012-10-12 14:45
快速回复:顺序表数据删除问题求助
数据加载中...
 
   



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

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