| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:关于顺序表删除的问题
取消只看楼主 加入收藏
思小宏
Rank: 1
等 级:新手上路
帖 子:9
专家分:6
注 册:2012-12-1
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:2 
关于顺序表删除的问题
在顺序表操作6那里出了问题,想不通是什么问题,小弟目前是大二软件工程的学生,求大师解答!




#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define  LIST_INIT_SIZE     100  // 线性表存储空间的初始分配量
#define  LISTINCREMENT    10   // 线性表存储空间的分配增量
#define  OK 1
#define OVERFLOW 0
#define ERROR 0
typedef char ElemType;  // 处理字符数据
typedef  struct {     
    ElemType *elem;    // 存储空间基址
    int      length;   // 当前长度
    int      listsize;  // 当前分配的存储容量以sizeof(ElemType)为单位
} SqList;  // 顺序表

int InitList_Sq(SqList& L) { // 顺序表操作1
  // 构造一个空的顺序表
  L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if(!L.elem)exit(OVERFLOW);
  L.length=0;
  L.listsize=LIST_INIT_SIZE;
  return OK;
} // InitList_Sq

void ShowList_Sq(SqList L) { // 顺序表操作2
  // 显示顺序表中的所有元素
int i;
if(!L.elem)exit(OVERFLOW);
 for(i=0;i<L.length;i++)
 {
     printf("%5d",L.elem[i]);
 }
 return;


  
} // ShowList_Sq

int GetLength_Sq(SqList L) { // 顺序表操作3
  // 获取顺序表表长
  if(!L.elem)exit(OVERFLOW);
  return L.length;
} // GetLength_Sq

int LocationList_Sq(SqList L, ElemType e) {  // 顺序表操作4
// 给定元素e在顺序表中找其位序
// 因为只找相等的,可以定义比较函数,也可不定义直接在本函数中比较相等
   int i=1;
   ElemType *p=L.elem;
   while(i<=L.length&&*p++!=e)i++;
   if(i<=L.length) return i;
   else return 0;
} // LocationList_Sq

int ListInsert_Sq(SqList& L, int i, ElemType e) { // 顺序表操作5
// 在顺序表L的第i个元素之前插入新的元素e,
// i 的合法范为 1≤i≤L.length+1
if (i < 1 || i > L.length+1) return ERROR;
if (L.length >= L.listsize) {
                          // 当前存储空间已满,增加分配
    ElemType *newbase;
    newbase = (ElemType *)realloc(L.elem,                                                                 
         (L.listsize+LISTINCREMENT)*sizeof (ElemType));
    if (!newbase) exit(OVERFLOW);  
                           // 存储分配失败
    L.elem = newbase;                // 新基址
    L.listsize += LISTINCREMENT; // 增加存储容量
}


} // ListInsert_Sq
int ListDelete_Sq(SqList& L, int i, ElemType& e) { // 顺序表操作6
// 把顺序表L的第i个元素删除, 并把其值放到e中
// i 的合法范围为 1≤i≤L.length
  if((i<1)||(i>L.length)) return ERROR;
  int p,q;
  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;
  
} // ListDelete_Sq   

[/color]
void DestroyList_Sq(SqList& L) { // 顺序表操作7
// 销毁顺序表
  free(L.elem);
  L.length=0;
}

int main() {
int i;
SqList L;
ElemType e;
ElemType a[]={'a','b','c','d','e'};
    InitList_Sq(L);                                // 实验内容1
    for(i=0;i<5;i++) ListInsert_Sq(L, i+1, a[i]);        // 实验内容2
    printf("当前表中的元素:\n");
    ShowList_Sq(L);
    printf("当前表的长度:%d\n",GetLength_Sq(L));
    i=LocationList_Sq(L, 'e');                         // 实验内容3
    if(i==0) printf("e不在当前表中\n");
    else printf("e在当前表中,在表中的位置:%d\n",i);
    i=LocationList_Sq(L, 'f');
    if(i==0) printf("f不在当前表中\n");
    else printf("f在当前表中,在表中的位置:%d\n",i);
    if(ListInsert_Sq(L, 2, 'f')) {                     // 实验内容4
        printf("插入成功,当前表中的元素:\n");
        ShowList_Sq(L);
        printf("当前表的长度:%d\n",GetLength_Sq(L));
    }
    if(ListDelete_Sq(L, 5, e)) {                     // 实验内容5
        printf("删除成功,删除的第5个元素是:%c\n",e);
        printf("当前表中的元素:\n");
        ShowList_Sq(L);
        printf("当前表的长度:%d\n",GetLength_Sq(L));
    }
DestroyList_Sq(L);                                 // 实验内容6
return 0;
}
搜索更多相关主题的帖子: 存储 include 线性表 
2012-12-01 12:55
思小宏
Rank: 1
等 级:新手上路
帖 子:9
专家分:6
注 册:2012-12-1
收藏
得分:0 
回复 2楼 yuccn
运行完后不是我想要的结果啊,表中没有数据
2012-12-02 21:52
思小宏
Rank: 1
等 级:新手上路
帖 子:9
专家分:6
注 册:2012-12-1
收藏
得分:0 
回复 4楼 凌云飞翔
完全正确~大师你是已经在工作的了么??
2012-12-04 11:01
快速回复:关于顺序表删除的问题
数据加载中...
 
   



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

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