注册 登录
编程论坛 数据结构与算法

数据结构线性表问题

qwe885167759 发布于 2013-09-27 11:04, 526 次点击
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 10//线性表存储空间的初始增量
#define LISTINCREMENT 10 // ?
typedef struct
{
    int * elem;// 存储空间基址
    int length;//当前长度
    int listsize;//当前分配的存储容量
}SqList;
SqList L;
int InitList_Sq(SqList & L)
{//构造一个新的线性表。
    L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
    if(!L.elem)
        exit(OVERFLOW);//存储容量失败
    L.length=0; //空表长度为0
    L.listsize=LIST_INIT_SIZE;//存储初始容量
    return OK;
}//InitList_Sqint
void main()
 {
     SqList L;
     int i,n;
     int e;
     cout<<"输入顺序表的个数:"<<endl;
     cin>>n;
     int *p=(int *)malloc(n*sizeof(int));
     InitList_Sq(L);
     cout<<"输入线性表"<<n<<"个元素的值"<<endl;
     for(i=0;i<n;i++)
     {
         
         cin>>p[i];
         L.elem[i]=p[i];
        // InitList_Sq(L);
     }
     for (int j=0;j<n;j++)
     {
        cout<<l.elem[j]<<endl;
     }
    /* cout<<endl;
     L.length=i;
     cout<<endl;
     cout<<"输入要插入元素的值"<<endl;cin>>e;
     cout<<endl;
     cout<<"输入要插入的位置"<<endl;cin>>i;
//     LIstInsert_Sq( L, i, e);
     for(i=0;i<n+1;i++)cout<<L.elem[i];
     cout<<endl;cout<<"输入要删除的位置"<<endl;cin>>i;
//     ListDelete_Sq(L,i,e);
     for(i=0;i<n;i++)cout<<L.elem[i];
     free(p);*/
 }

为什么在结构体中typedef struct
{
    int * elem;// 存储空间基址
    int length;//当前长度
    int listsize;//当前分配的存储容量
}SqList;
int *elem在main函数输入时成了L.elem[j];求详细解答

4 回复
#2
未未来2013-09-27 19:47
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
这个步骤就是
分配一个动态数组,并返回指向新分配数组的第一个元素的指针;
该返回值初始化了指针 elem;
对elem做下标操作符就是取元素,
#3
zyy_hz2013-09-28 12:09
SqList L;是申明了一个结构体变量。这个结构体变量里包括了三个成员变量elem,length,listsize。
而L.elem是对L中的elem这个int型指针成员变量进行操作,L.elem[j]说明是对这个数组的第j个元素进行操作(包括赋值和取值)(下标从0开始)。还有就是这个程序存在着数组越界问题。当n > LIST_INIT_SIZE时。
我是瞎打一通。希望对LZ有用。
#4
qwe8851677592013-09-28 12:44
回复 3楼 zyy_hz
谢谢,有点明白了
#5
qwe8851677592013-09-28 12:46
回复 2楼 未未来
嗯嗯,懂了。谢谢
1