利用指针取地址:
//线性表的插入操作
#include<stdio.h>
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 20//线性表存储空间的初始量
#define LISTINCREMENT 10//线性表存储空间的增量
typedef struct{
int *elem;//储存空间的基地址
int length;//当前长度
int listsize;//当前分配的储存容量
}SqList;
SqList l;
int InitList(SqList &l)
{
l.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l.elem) exit(OVERFLOW);
l.length=0;
l.listsize=LIST_INIT_SIZE;
return OK;
}
int ListInsert(SqList &l,int i,int e)
{
int *newbase,*p,*q;
if(l.length>=l.listsize)
{
newbase=(int*)realloc(l.elem,(l.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW);
l.elem=newbase;
l.listsize+=LISTINCREMENT;
}
if(i<1 || i>l.length+1) return ERROR;
p=&(l.elem[i]);
for(q=&(l.elem[l.length]);q>=p;q--)
{
*(q+1)=*q;
}
l.length++;
*p=e;
}
int main()
{
int i,j,e;
InitList(l);
cout<<"请输入线性表的长度:"<<endl;
cin>>l.length;
cout<<"请依次输入线性表的元素:"<<endl;
for(i=1;i<=l.length;i++)
cin>>l.elem[i];
cout<<"请输入想要插入的元素的位置(几号元素之前):"<<endl;
cin>>j;
cout<<"请输入想要插入的元素:"<<endl;
cin>>e;
ListInsert(l,j,e);
cout<<"插入元素后线性表的序列为:"<<endl;
for(i=1;i<=l.length;i++)
cout<<l.elem[i]<<" ";
}
//12 13 21 24 28 30 42 77
//在5号元素之前插入25
常规算法:
//线性表的插入操作
#include<stdio.h>
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 20//线性表存储空间的初始量
#define LISTINCREMENT 10//线性表存储空间的增量
typedef struct{
int *elem;//储存空间的基地址
int length;//当前长度
int listsize;//当前分配的储存容量
}SqList;
SqList l;
int InitList(SqList &l)
{
l.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l.elem) exit(OVERFLOW);
l.length=0;
l.listsize=LIST_INIT_SIZE;
return OK;
}
int ListInsert(SqList &l,int i,int e)
{
int *newbase;
int j;
if(l.length>=l.listsize)
{
newbase=(int*)realloc(l.elem,(l.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW);
l.elem=newbase;
l.listsize+=LISTINCREMENT;
}
if(i<1 || i>l.length+1) return ERROR;
for(j=l.length;j>=i;j--)
{
l.elem[j+1]=l.elem[j];
}
l.length++;
l.elem[i]=e;
}
int main()
{
int i,j,e;
InitList(l);
cout<<"请输入线性表的长度:"<<endl;
cin>>l.length;
cout<<"请依次输入线性表的元素:"<<endl;
for(i=1;i<=l.length;i++)
cin>>l.elem[i];
cout<<"请输入想要插入的元素的位置(几号元素之前):"<<endl;
cin>>j;
cout<<"请输入想要插入的元素:"<<endl;
cin>>e;
ListInsert(l,j,e);
cout<<"插入元素后线性表的序列为:"<<endl;
for(i=1;i<=l.length;i++)
cout<<l.elem[i]<<" ";
}
//12 13 21 24 28 31 42 77
//在5号元素之前插入25
运行结果: