下面展示一些 代码
。
#include <iostream>
#include<stdlib.h>
using namespace std;
#define InitSize 10//默认的最大长度
//动态分配的算法
typedef struct
{
int *data;//指示动态分配数组的指针
int MaxSize;//顺序表的最大容量
int length;//顺序表的当前长度
}SeqList;
//初始化一个顺序表
void InitList(SeqList &L)
{
L.data=(int *)malloc(InitSize * sizeof(int));//用malloc函数申请一片连续的存储空间
L.length=0;
L.MaxSize=InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++)
{
L.data[i]=p[i];//将数据复制到新区域
};
L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
free(p);//释放原来的内存空间
}
//插入
bool InsertList(SeqList &L,int i,int e)
{
if(i<1||i>L.length+1)//i表示位序,注意位序和数组下标的关系,位序从1开始,数组下标从0开始
return false;
for(int j=L.length;j>=i;j--)//将第i个元素及以后的元素后移
L.data[j]=L.data[j-1];//最深层循环语句
L.data[i-1]=e;//在位置i处放入e
L.length++;//顺序表长度+1
return true;
}
//删除
bool ListDelete(SeqList &L,int i,int &e)
{
if(i<1||i>L.length)
return false;
e=L.data[i-1];//将被删除的元素赋值给e
for(int j=i;j<L.length;j++)//将第i个位置后的元素前移
L.data[j-1]=L.data[i];
L.length--;//顺序表长度减一
return true;
}
//打印
void printList(SeqList L)
{
int i;
for(i=0;i<=L.length-1;i++)
{
printf("\n顺序表第%d个数:%d\n",i+1,L.data[i]);
}
}
//按位查找
int GetElem(SeqList L,int i)
{
cout<<"查找到顺序表第"<<i<<"位的元素,其值为:"<<L.data[i-1]<<"\n";
return L.data[i-1];
}
//按值查找
int LocateElem(SeqList L,int e)
{
int i;
for(i=0;i<L.length;i++)
if(L.data[i]==e)//基本数据类型:int,char,double,float等可以直接用运算符"=="比较大小,结构类型的数据不能用"=="比较大小
cout<<"查找到"<<e<<",在顺序表的第"<<i+1<<"位\n";
return i+1;
}
int main()
{
SeqList L;//声明一个顺序表
InitList(L);//初始化顺序表
IncreaseSize(L,6);
InsertList(L,1,99);
InsertList(L,2,66);
InsertList(L,3,100);
printList(L);
GetElem(L,2);
LocateElem(L,100);
int e=-1;//用变量e将删除的元素带回来
if(ListDelete(L,9,e))
printf("已删除第3个元素,删除元素值为:%d\n",e);
else
printf("删除位序不合法");
printList(L);
return 0;
}