标题:调试程序,线性表!
取消只看楼主
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
 问题点数:0 回复次数:3 
调试程序,线性表!

程序能运行,但算法有错误!!
怎么也得不了正确结果, 我感觉void ListInsert2(Sqlist *L) 有错误!!
调了好长时间还是不行,帮帮忙!

#include <stdio.h>
#include <malloc.h>
#define LISTSIZE 10

typedef struct
{
int *elem;
int length;
int listsize;
}SqList;

void InitList(SqList *L);
void DestroyList(SqList *L);
int ListEmpty(SqList *L);
int ListLength(SqList *L);
int GetElem(SqList *L, int i, int *e);
void ListInsert(SqList *L, int n);
void ListInsert2(SqList *L, int i, int e);
int ListDelete(SqList *L, int i, int *e);
void Print(SqList *L);

int main(void)
{
int k, length, e1, e2, z;

SqList L;

InitList(&L);
ListInsert(&L, LISTSIZE - 1);
Print(&L);
ListInsert2(&L, 2, 20);
Print(&L);

z = ListDelete(&L, 3, &e1);
k = GetElem(&L, 4, &e2);
Print(&L);
length = ListLength(&L);

printf("z = %d\n",z);
printf("k = %d\n",k);
printf("length = %d\n",length);
Print(&L);

ListInsert2(&L, 2, 4);
Print(&L);

length = ListLength(&L);
printf("length = %d\n",length);

return 0;
}

void InitList(SqList *L)
{
(*L).elem = (int*)malloc(LISTSIZE * sizeof(int));
if (!(*L).elem) exit(1);

(*L).length = 0;
(*L).listsize = LISTSIZE;
}

void DestroyList(SqList *L)
{
if ((*L).elem == NULL) exit(1);

free((*L).elem);

(*L).elem = NULL;
}


int ListEmpty(SqList *L)
{
if ((*L).elem == NULL) exit(1);
if ((*L).length == 0) return 0;
else return 1;
}

int ListLength(SqList *L)
{
if ((*L).elem == NULL) exit(1);
return (*L).length;
}

int GetElem(SqList *L, int i, int *e)
{
if ((*L).elem == NULL) exit(1);
if (i<1 || i>((*L).length + 1)) return -1;
e = &(*L).elem[i];
return *e;
}

void ListInsert(SqList *L, int n)
{
int i;
if ((*L).elem == NULL) exit(1);

for (i = 0; i < n; i++)
{
printf("Enter one number:\n");
scanf("%d",&(*L).elem[i]);

++(*L).length;
}
}

void ListInsert2(SqList *L, int i, int e)
{
int *p,j,*q;

if ((*L).elem == NULL) exit(1);
if (i<1 || i>((*L).length + 1)) exit(1);


p = &(*L).elem[(*L).length - 1];
for (j = (*L).length -1; j >= i-1; --j)
{
*(p + 1) = *p;
}
q = &(*L).elem[i];

*q = e;
}

int ListDelete(SqList *L, int i, int *e)
{
int *p;
int j;
if ((*L).elem == NULL) exit(1);
if (i<1 || i>((*L).length +1)) exit(1);

*e = (*L).elem[i];
p = &(*L).elem[i];

for (j = i+1; j <((*L).length - 1); ++j)
{
*(p - 1) = *p;
}
--(*L).length;
return *e;
}

void Print(SqList *L)
{
int i;

if ((*L).elem == NULL) exit(1);

for ( i = 0; i < (*L).length; i++)
{
printf("%d ",(*L).elem[i]);
}

printf("\n");
}

搜索更多相关主题的帖子: int 线性 SqList void 
2006-05-18 13:52
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
得分:0 

谢谢论坛 大哥
能给我讲讲什么时候该用*L,什么时候该用L 吗 ?
我都快晕啦!!

static void Instruction(void); /* 菜单函数 */
static void InitialList(SqList *L); /* 初始化函数 */
static void CreateList(SqList *L); /* 创建顺序表函数 */
static void InsertElem(SqList *L, int pos, int item); /* 插入一个元素函数 */
static void DeleteElem(SqList *L, int pos); /* 删除指定位置元素函数 */
static int SearchElem(SqList L, int item); /* 查找某元素 */
static void VisitList(SqList L); /* 打印顺序表 */
static void DestroyList(SqList *L); /* 销毁顺序表 */


奋斗改变一切!!
2006-05-18 17:57
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
得分:0 
谢谢啦,明白!!

奋斗改变一切!!
2006-05-18 18:15
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
得分:0 
下面为什么不同啊!!
static void InsertElem(SqList *L, int pos, int item)
if (pos < 1 || pos > (*L).length + 1)
static void DeleteElem(SqList *L, int pos)
if (pos < 1 || pos > (*L).length)

奋斗改变一切!!
2006-05-18 20:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-65257-1-1.html




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

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