数据结构线性表之顺序表实作

#include<iostream>
#include<cstdlib>
using namespace std;


#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT  10  //线性表存储空间的分配增量


typedef struct 
{
int *elem;             //存储空间基址
int length;            //当前元素个数
int listsize;          //当前线性表的大小
}SqList;                   //自定义的数据类型


void InitList_Sq(SqList &L)
{
//构造一个空的线性表L
L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(-1);   //存储空间分配失败
L.length=0;
L.listsize=LIST_INIT_SIZE;
}


void ListInsert_Sq(SqList &L,int i,int e)
{
//在顺序表L中第i个位置之前插入新的元素e,i的合法位置为1<=i<=Listlength_Sq(L)+1,若i不满足,则不作任何操作
if(L.length>=L.listsize)//存储空间已满
{
int* newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(-1);          //分配失败
L.elem=newbase;                //新基址
L.listsize+=LISTINCREMENT;     //增加后的存储容量
}
int* q=&(L.elem[i-1]);             //q为插入的位置
for(int* p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;                     //实现元素的后移
*q=e;
++L.length;
}


void ListDelete_Sq(SqList &L,int i)
{
//在顺序线性表L中删除第i个元素,i的合法位置为1<=i<=ListLength_Sq(L),若i不满足,则不作任何操作
if(i>0 && i<=L.length)
{
int* p=&(L.elem[i-1]);        //p为被删除元素的位置
int* q=L.elem+L.length-1;     //表尾元素的位置
for(++p;p<=q;++p)
{
*(p-1)=*p;                //实现删除点之后的元素左移
}
--L.length;
}
}


void ListDisplay(SqList L)
{
    for(int *p=L.elem;p<L.elem+L.length-1;++p)
        cout<<*p<<' '; 
    cout<<endl;
}
int main()
{
    int i;
SqList L;
InitList_Sq(L);

for(i=0;i<L.listsize;++i)
ListInsert_Sq(L,i,i);
    
ListDisplay(L);


    for(i=6;i<100;i+=5)
ListDelete_Sq(L,i);


    ListDisplay(L);
    
    system("pause"); 
return 0;

}


在用vc++6.0编译的时候,不知道因为什么原因,当不包含<iostream>时,编译器会提示std不是合法标示符或者不是命名空间.无奈只有包含<iostream>。。。

你可能感兴趣的:(数据结构,C++,malloc)