#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;
#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>。。。