线性表有关问题
线性表问题
#include <stdio.h>
#include <stdlib.h>
//以下为函数运行结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量
#define LISTINCREMENT 1 //线性表存储空间分配增量
typedef int Status; //函数类型,其值为为函数结果状态代码
typedef int ElemType; //假设数据元素为整型
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
}Sqlist;
//实现线性表的顺序存储结构的类型定义
static Sqlist L;//为了引用方便,定义为全局变量
static ElemType element;
///////////////////////////////////////
//函数名:InitList()
//参数:SqList L
//初始条件:无
//功能:构造一个空线性表
//返回值:存储分配失败:OVERFLOW
// 存储分配成功:OK
///////////////////////////////////////
Status InitList(Sqlist L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));为什么这个地方根本就没有分配内存呢?我后面取L.listsize值的时候都是为0!求解!!!
printf("成功");
if(L.elem==NULL)
exit(OVERFLOW);
else
{
L.length=0;
L.listsize=LISTINCREMENT;
return OK;
}
}
void main()
{
int i=0;int *p;
Status InitList(Sqlist L);
L.elem=&i;p=L.elem;
printf("输出:%d ",L.listsize);
for(i=0;i<L.listsize;i++)
{
L.elem=L.elem+1;
(L.elem)=&i;
printf("b");
}
printf("aaaaaaa");
for(i=0;i<L.listsize;i++)
{
printf("%d ",*(p));
}
}
------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
//以下为函数运行结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量
#define LISTINCREMENT 1 //线性表存储空间分配增量
typedef int Status; //函数类型,其值为为函数结果状态代码
typedef int ElemType; //假设数据元素为整型
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
}Sqlist;
//实现线性表的顺序存储结构的类型定义
static Sqlist L;//为了引用方便,定义为全局变量
static ElemType element;
///////////////////////////////////////
//函数名:InitList()
//参数:SqList L
//初始条件:无
//功能:构造一个空线性表
//返回值:存储分配失败:OVERFLOW
// 存储分配成功:OK
///////////////////////////////////////
Status InitList(Sqlist L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));为什么这个地方根本就没有分配内存呢?我后面取L.listsize值的时候都是为0!求解!!!
printf("成功");
if(L.elem==NULL)
exit(OVERFLOW);
else
{
L.length=0;
L.listsize=LISTINCREMENT;
return OK;
}
}
void main()
{
int i=0;int *p;
Status InitList(Sqlist L);
L.elem=&i;p=L.elem;
printf("输出:%d ",L.listsize);
for(i=0;i<L.listsize;i++)
{
L.elem=L.elem+1;
(L.elem)=&i;
printf("b");
}
printf("aaaaaaa");
for(i=0;i<L.listsize;i++)
{
printf("%d ",*(p));
}
}
------解决方案--------------------
- C/C++ code
Status InitList(Sqlist L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(L.elem==NULL) { printf("失败");//加个打印看看 exit(OVERFLOW); } else { printf("成功"); L.length=0; L.listsize=LISTINCREMENT; return OK; } }
------解决方案--------------------
- C/C++ code
#include <stdlib.h> #include "stdio.h" //以下为函数运行结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量 #define LISTINCREMENT 1 //线性表存储空间分配增量 typedef int Status; //函数类型,其值为为函数结果状态代码 typedef int ElemType; //假设数据元素为整型 typedef struct { ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量 }Sqlist; //实现线性表的顺序存储结构的类型定义 static Sqlist L;//为了引用方便,定义为全局变量 static ElemType element; /////////////////////////////////////// //函数名:InitList() //参数:SqList L //初始条件:无 //功能:构造一个空线性表 //返回值:存储分配失败:OVERFLOW // 存储分配成功:OK /////////////////////////////////////// Status InitList(Sqlist &L)//应该是地址传递 { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//为什么这个地方根本就没有分配内存呢?我后面取L.listsize值的时候都是为0!求解!!! if(L.elem==NULL) { printf("mallco error\n"); exit(OVERFLOW); } else { printf("成功"); L.length=0; L.listsize=LIST_INIT_SIZE;//此处不是增量 return OK; } } int main() { int i=0; int *p; /** Status InitList(Sqlist L);//函数调用不是这样子得啊 **/ InitList(L); L.elem=&i;p=L.elem; printf("输出:%d ",L.listsize); for(i=0;i<L.listsize;i++) { L.elem=L.elem+1; (L.elem)=&i; printf("b"); } printf("aaaaaaa"); for(i=0;i<L.listsize;i++) { printf("%d ",*(p)); } }