回复 2楼 zisefengye
有没有
类似这种的
#include <iostream>
using namespace std;
#include <stdlib.h>
#define datatype char
const
Init_n=3,inc_n=2;
typedef struct{
int n,max;
datatype *a;
}list;
list *Init(){/*初始化*/
list *L=(list*)malloc(sizeof list);
L->a=(datatype*)malloc(Init*sizeof(datatype));
if(!L->a){cout<<"内存不足!";return 0;}
L->max=Init_n-1;
L->n=-1;
return L;/*成功,置空表*/
}/*调用格式为:list *L=Init();*/
void Out(list *L){/*输出*/
int i;
cout<<"(";
if(L->n>-1)cout<<"%d"<<L->a[0];/*输出首元*/
for(i=1;i<=L->n;i++)
cout<<",%d"<<L->a[i];/*输出其它元素*/
cout<<")";
}/*输出形式为:(a1,a2,…,an)*/
int Ins(list *L,int i,datatype x){/*插入*/
int j;
if(i<1||i>L->n+2){cout<<"位置错!";
return 0;}
if(L->n+1==L->max){
L->max+=inc_n;
L->a=(datatype*)realloc(L->a,L->max*sizeof(datatype));
if(!L->a){cout<<"内存不足!";return 0;}
}
for(j=L->n++;j>=i-1;j--)
L->a[j+1]=L->a[j];/*向后移动数据*/
L->a[i-1]=x;
return 1;/*插入x,成功*/
}
int Del(list *L,int i){/*删除*/
int j;
if(i<1||i>L->n+1){
printf("无此插入位置!"); return 0;
}
for(j=i;j<=L->n;j++)
L->a[j-1]=L->a[j];/*前移数据*/
L->n--;
return 1;/*修正尾元下标,成功*/
}
int Location(list *L,datatype x){/*查找*/
int i;
for(i=0;i<=L->n;i++)
if(L->a[i]==x)return i+1;/*成功,返回序号*/
return 0;/*失败,返回约定值*/
}
void Replace(list *L,int i,datatype x){//替换
int j,n;
if(!L->n){cout<<"表空!";exit(0);}
while(L->a&&i>j){
for(j=0;j<=n;j++)
L->a[i-1]=x;//替换
}
}
int Length(list *L){//求表长
int i=0;
if(!L->n)return 0;
while(L->n>0&&L->max<=3){
i++;
if(L->max>3)i+=inc_n;
return i;
}
}
datatype Get(list *L,int i){//取元素
int j,n;
datatype k;
if(!L->n){cout<<"表空!";exit(0);}
while(L->n&&j<i){
for(j=0;j<=n+1;j++)
k=L->a[i-1];
return k;
}
}
void Clear(list *L){//清空
if(!L->n){cout<<"表空!";exit(0);}
else Clear(L);
}
void main(){/*测试*/
list *L=Init();
if(!L)return;
cout<<"L=";
Out(L);
cout<<"\n\n用插入生成顺序表:(1,5,3)";
if(!Ins(L,1,5)||!Ins(L,1,1)||!Ins(L,3,3))return;
cout<<"\nL=";
Out(L);
cout<<"\n\n值为2的元素序号为:%d"<<Location(L,2);
cout<<"\n值为3的元素序号为:%d"<<Location(L,3);
cout<<"\n\n用删除删空表:";
if(!Del(L,2)||!Del(L,2)||!Del(L,1))return;
cout<<"\nL=";
Out(L);
cout<<"\n\n测扩充:";
Ins(L,1,1);
Ins(L,1,2);
Ins(L,1,3);
Ins(L,1,4);
Ins(L,1,5);
Ins(L,1,6);
cout<<"\nL=";
Out(L);
cout<<"\n";
Replace(L,1,2);
Length(L);
Clear(L);
cout<<endl;