试验报告
――顺序表的建立与插入操作
计科(3)--苗杰
2005年9月6日
#include <iostream>
using namespace std; //使用标准c++
const int list_init_size=10;
const int listincrement=1;
const int TRUE=1;
const int FALSE=0;
const int ok=1;
const int error=0;
typedef int status;
typedef struct
{
int* elem;
int length;
int listsize;
}sqlist;
int main()
{
int j,num; //第j个元素前插入数据num
sqlist M;
status list_init(sqlist &L);
status list_output(sqlist &L);
status list_insert(sqlist &L,int i,int e); //函数的声明
list_init(M); //初始化一个表(函数的调用)
M.length =6; //欲建立一个6个元素的表
for(int i=0;i<6 ;i++)
cin>>M.elem [i]; //用户输入数据
list_output(M);//输出(函数的调用)
cout<<endl;
cin>>j>>num;
list_insert(M,j,num); //插入用户输入的数据
cout<<endl;
list_output(M);
return ok;
}
status list_init(sqlist &L) //初始化表的函数定义
{
L.elem =(int*)malloc(list_init_size*sizeof(int));
if (!L.elem ) exit(error);
L.length =0;
L.listsize =list_init_size;
return ok;
}
status list_output(sqlist &L) //输出一个表的函数定义
{
for(int i=0;i<L.length ;i++)
cout<<L.elem [i]<<" ";
return ok;
}
status list_insert(sqlist &L,int i,int e) //插入一个元素的函数定义
{
int* newbase,*p,*q;
if(i<1 || i>L.length +1) return error;
if (L.length >=L.listsize )
{
newbase=(int*)realloc(L.elem ,(L.listsize +listincrement)*sizeof(int));
if (!newbase) exit(error);
L.elem =newbase;
L.listsize +=listincrement;
}
q=&(L.elem [i-1]);
for (p=&(L.elem [L.length -1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length ;
return ok;
}
试验数据
D:\>sqlist.exe
23 ↙
11 ↙
7 ↙
9 ↙
14 ↙
26 ↙
23 11 7 9 14 26
5 88↙ (在第五个位置插入)
23 11 7 9 88 14 26