大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
创新互联是专业的思南网站建设公司,思南接单;提供成都网站设计、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行思南网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
#include malloc.h
# define MaxSize 50
typedef struct{
ElemType data[MaxSize];//存放顺序表元素
int length;//存放顺序表长度
}SqList;//顺序表类型定义
//建立顺序表
void CreateList(SqList *L,ElemType a[],int n){
int i;
for(i=0;in;i++){
L-data [i]=a[i];
}
L-length =n;
}
//顺序表基本运算算法
//初始化线性表InitList(L)
void InitList(SqList *L){
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L-length =0;
}//本算法的时间复杂度为O(1)
//销毁线性表
void DestroyList(SqList *L){
free(L);
}//本算法的时间复杂度为O(1)
//判断线性表是否为空
int ListEmpty(SqList *L){
return (L-length ==0);
}//本算法的时间复杂度为O(1)
//求线性表的长度
int ListLength(SqList *L){
return (L-length);
}//本算法的时间复杂度为O(1)
//输出线性表
void DispList(SqList *L)
{
int i;
if(ListEmpty(L)) return;
for(i=0;iL-length;i++){
printf(nn,L-data[i]);
}
printf("\n");
}//本算法的时间复杂度为O(L-length)
//求线性表中某个数据的元素值
int GetElem(SqList *L,int i,ElemType e)
{
if(i1||iL-length)
return 0;
e=L-data[i-1];//这儿体现了数组的优点,可以直接通过下标访问
return 1;
}//本算法的时间复杂度为O(1)
//按元素的值查找
int LocateElem(SqList *L,ElemType e){
int i=0;
while(iL-length L-data[i]!=e)i++;
if(i=L-length)
return 0;
else
return i+1;
}//本算法中基本运算为while循环中的i++语句,故时间复杂度为O(L-length)
//插入数据元素
int ListInsert(SqList *L,int i,ElemType e){
int j;
if(i1 || iL-length+1)
return 0;//参数错误,返回0
i--;//将顺序逻辑位序变为物理位序
for(j=L-length;ji;j--){
L-data[j]=L-data[j-1];//将data[i]及后面的元素后移一个位置
}
L-data[i]=e;//插入元素e
L-length++;//增加长度
return 1;
}//本算法的平均时间复杂度为O(n)
//删除数据元素
int ListDelete(SqList *L,int i,ElemType e){
int j;
if(i1 || iL-length)
return 0;
i--;//将顺序逻辑位序变为物理位序
e=L-data[i];
for(j=i;jL-length-1;j++){
L-data[j]=L-data[j+1];//将data[i]之后的元素前移一个位置,这就是数组中的删除思想
}
L-length--;
return 1;
}//本算法的平均时间复杂度为O(n)
函数中不会修改main()函数中定义的变量,修改如下:
//---------------------------------------------------------------------------
#include
#include
#define
LIST_INIT_SIZE
100
#define
LISTINCREMENT
10
typedef
int
ElemType[LIST_INIT_SIZE];
typedef
struct
{
ElemType
*elem;
int
length;
int
listsize;
}SqList;
typedef
int
Status;
int
InitList_Sq(SqList
*L)
/*注意这里*/
{
L-elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
/*注意这里*/
if(!L-elem)
/*注意这里*/
L-length=1;
/*注意这里*/
printf("%d\n",L-length);
/*注意这里*/
L-listsize=LIST_INIT_SIZE;
/*注意这里*/
return
1;
}
int
main()
{
SqList
p=;
/*注意这里*/
InitList_Sq(p);
/*注意这里*/
printf("%d\n",p.length);
return
0;
}
//---------------------------------------------------------------------------
#include
stdio.h
#include
malloc.h
/*包含头文件*/
#define
INIT_SIZE
100
/*去除分号*/
typedef
int
ElemType;
typedef
struct{
ElemType
*elem;
int
length;
int
listsize;
}SqList;
//SqList
L;
不需要用全局变量
int
SqListInit(SqList
L)
/*删除了*号,采用引用参数*/
{
L.elem=(ElemType
*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L.elem)
return
0;
L.length=0;
L.listsize=INIT_SIZE;
return
1;
}
void
main()
{
SqList
L;
/*用局部变量*/
SqListInit(L);
/*调用时,去除实参参数类型*/
printf("当前长度为%d\n",L.length);
printf("当前空间为%d\n",L.listsize);
free(L.elem);
/*退出前最好要释放L所用的堆空间*/
}
肯定是要分配空间的,你第一个程序的initsqlist函数中声明的结构体指针(Sqlist *a;),而第二个程序的initsqlist函数中是声明的结构体(Sqlist a;),前者只是在计算机内存中声明一个指针,而不会给这个指针分配内存空间,所以你初始化的时候要给这个指针用malloc函数分配空间,而后者是实实在在的定义了一个结构体,在内存在不仅仅是一个地址,还分配了空间,就像你定义了一个数组一样,已经在内存存在空间了,不需要再分配了。
总体来说就是你定义的是指针的话就要分配空间。
你的2个程序都是对的,但是一般用第一种定义链表!!!
不是inta[] 而是例如int a[10]这种。括号内一定要有个常量数字。
我们可以这样定义
#define N 5
int a[N]
这表明了数组名为a;数组有5个元素;分别是a[0]到a[4];
对于数组来说;数组是变量的集合,因此数组也具有与变量相同的数据类型和储存类型。数组的类型就是它所有的变量的类型。在定义数组时,应在数组名前对数组的类型加以确定。如上面的int a[10];则表明了数组内元素均为整形。
所有当表示浮点型可以定义为例如float a[10]。 举例如下:
扩展资料
数组名是由用户命名的C语言标识符,要遵循标识符命名规则。数组名表示数组存储区域的首地址。数组的首地址也就是第一个元素的地址。数组名是一个地址常量,不能对它赋值。
数组名后是由方括号括起来的常量表达式,不能使用其他括号