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指针,这么做显然不对,楼主可能弄混了
----------------解决方案--------------------------------------------------------
你程序大体三个问题
几个函数不需要返回值。
没判断需要输入的数据个数是不是超过申请的空间
输出表时 while(p)是错的 就算表输出完了,p也不为NULL
非常感谢版主,但我可不问下
while(p),不可以
申请的内存难道不是空的吗
----------------解决方案--------------------------------------------------------