当前位置: 代码迷 >> C语言 >> 顺序表问题,结果很奇怪的(12点前在线等待)
  详细解决方案

顺序表问题,结果很奇怪的(12点前在线等待)

热度:359   发布时间:2006-05-10 23:21:00.0
以下是引用论坛在2006-5-10 23:15:00的发言:
if (L.length > L.listsize)
{
if ((L.elem = (int*)realloc(L.elem, sizeof(int) *(L.listsize + INCREMENT))) == NULL)
{
exit(1);
}
L.listsize += INCREMENT;
这个地方可能还有点问题,但我想不起来了

应该是if (L.length >= L.length)
----------------解决方案--------------------------------------------------------
你写了程序
我非常的感谢,
但我的到底是哪的错误呢,
还是没有解决根本问题啊
----------------解决方案--------------------------------------------------------

# include <stdio.h>
# include <conio.h>
# include <stdlib.h>

#define LIST_INIT_SIZE 100
#define INCREMENT 10
#define ERROR 0
#define DEBUG 0

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

int CreatLinklist(Sqlist &L);
int InitList_Sq(Sqlist &L,int n);
void print(Sqlist L, int n);

int CreatLinklist(Sqlist &L)
{
if((L.elem = (int*)malloc(sizeof(int) * LIST_INIT_SIZE)) == NULL)
{
exit(1);
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;

return 1;

}

int InitList_Sq(Sqlist &L,int n)
{
int i;
printf("\nInput the value of the Sqlist as follows:\n");
for(i = 0; i < n; i++)
{
scanf("%d", &L.elem[i]);
L.length++;
}
return 1;
}

void print(Sqlist L, int n)
{
int i;
for (i = 0;i < n; i++)
{
printf("%d ", L.elem[i]);
}
}


int main(void)
{
int m;
Sqlist L;

CreatLinklist(L);

printf("Input the len of the Sqlist:\n");
scanf("%d", &m);

InitList_Sq(L,m);

print(L, m);
free(L.elem);

getch();
return 0;
}


----------------解决方案--------------------------------------------------------
void print(Sqlist &L)//打印
{
int *p;
p=L.elem;
while(p) printf("%2d", *p++);
}

无法停止循环
----------------解决方案--------------------------------------------------------

改了下你的~~
[CODE]
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "alloc.h"
#define LIST_INIT_SIZE 100
#define INCREMENT 10
#define ERROR 0
#define DEBUG 0

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


void CreatLinklist(Sqlist &L);
void InitList_Sq(Sqlist &L,int n);
void Print(Sqlist &L);

void CreatLinklist(Sqlist &L)
{
L.elem=(int*)malloc(sizeof(int)*LIST_INIT_SIZE);
if(!L.elem)
exit(-1);
L.length=0;
L.listsize=LIST_INIT_SIZE;
}

void InitList_Sq(Sqlist &L,int n)
{
int i,*k;

if(n>LIST_INIT_SIZE) /*这样不正式,但这个程序足以*/
{
L.elem=(int *)realloc(L.elem,sizeof(int)*n);
L.listsize=n;
}
k=L.elem;
printf("\nInput the value of the Sqlist as follows:\n");
for(i=0;i<n;i++)
{
scanf("%d", k++);
L.length++;
}
}

void Print(Sqlist &L)
{
int *p;

p=L.elem;
while(p < L.elem+L.length)
printf("%d ", *p++);
}


int main()
{
int m, a1, a2, b;
Sqlist L;
int e;

CreatLinklist(L);
printf("Input the len of the Sqlist:\n");
scanf("%d", &m);
InitList_Sq(L,m);
Print(L);
free(L.elem);

return 0;
}


[/CODE]


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------

你程序大体三个问题

几个函数不需要返回值。
没判断需要输入的数据个数是不是超过申请的空间
输出表时 while(p)是错的 就算表输出完了,p也不为NULL


----------------解决方案--------------------------------------------------------
动态分配后直接像数组一样应用,没必要在另社指针
----------------解决方案--------------------------------------------------------

他可以那么用~ 主要是用错了

这又不是单向链表,没在表尾设置NULL指针,这么做显然不对,楼主可能弄混了


----------------解决方案--------------------------------------------------------
以下是引用feng1256在2006-5-10 23:34:00的发言:

你程序大体三个问题

几个函数不需要返回值。
没判断需要输入的数据个数是不是超过申请的空间
输出表时 while(p)是错的 就算表输出完了,p也不为NULL

非常感谢版主,但我可不问下
while(p),不可以
申请的内存难道不是空的吗
----------------解决方案--------------------------------------------------------

  相关解决方案