#include<stdio.h>
#include<stdlib.h>
#define InitSize 10//默认的最大长度
typedef int Elemtype;
typedef int Status;
typedef struct{
int *data; //动态分配的指针
int MaxSize; //顺序表的最大程度。
int length; //顺序表的元素个数
}SqList;
//初始化动态链表
Status InitSqList(SqList &L)
{
//用malloc申请一片连续的存储空间
L.data = (int*)malloc(InitSize*sizeof(int));
if(!L.data)
{
return false;//存储分配失败
}
L.length = 0;
L.MaxSize= InitSize;
return 1;
}
//增加动态数组的长度
Status IncreaseSize(SqList &L,int len)
{
int *p = L.data;
L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));//申请L.MaxSize+len个连续的空间;
if(!L.data)
{
return false; //存储分配失败
}
for(int i=0;i<L.length;i++)
{
L.data[i]=p[i];//将原始数据复制到新的区域。
}
L.MaxSize = L.MaxSize + len;//顺序表的长度发生改变
free(p);//释放原空间;
}
//按值查找;
Status GetElemSqList(SqList L,Elemtype e)
{
for(int i=0;i<L.length;i++)
{
if(L.data[i] == e)
{
return i+1;
}
}
return false;
}
//按位查找;
Status LocateElemSqList(SqList L,int i)
{
if(i<1 || i>L.length)
{
return false;
}
else
{
return L.data[i-1];
}
}
//在顺序表中插入数据
Status InsertSqList(SqList &L,int i,Elemtype e)//L如果发生变化加&,否则不加。
{
if(i<1 || i>L.length+1)
{
return false;
}
if(L.length >= L.MaxSize) //当前存储空间已满,增加分配。
{
IncreaseSize(L,10);//申请空间。
}
for(int j=L.length;j>=i;j--)
{
L.data[j] = L.data[j-1];
}
L.data[i-1]=e;//插入数据
L.length++;
return true;
}
Status DeleteSqList(SqList &L,int i,Elemtype &e)
{
if(i<1 || i>L.length)
{
return false;
}
e = L.data[i-1];//将该值取出;
for(int j=i;j<L.length;j++)
{
L.data[j-1]=L.data[j]; //将i-1及以后的数据往前挪一个位置
}
L.length--;
return true;
}
//显示顺序表中的所有数据;
void printSqList(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.data[i]);
}
printf("\n");
}
//主函数
int main()
{
SqList L;//声明一个顺序表;
InitSqList(L);//初始化动态顺序表
Elemtype e;
int n,m,i;
int x;
printf("请输入你输入数据的个数:");
scanf("%d",&n);
for(int i=1;i<=n;i++)//从i=1开始,将其为位序,从而直接插入。
{
scanf("%d",&m);
InsertSqList(L,i,m);
}
printf("插入后的顺序表为:");
printSqList(L);
printf("输入你要删除的位序:");
scanf("%d",&i);
if(DeleteSqList(L,i,e))
{
printf("删除成功。");
printf("删除后的顺序表为:");
printSqList(L);
}
else{
printf("输入的位序不合法。");
}
//按值查找位序;
printf("请输入查找的数字:");
scanf("%d",&x);
if(GetElemSqList(L,x))
{
printf("该数字%d的位序为%d\n",x,GetElemSqList(L,x));
}
else
{
printf("不存在该数字。\n");
}
//按位查找;
printf("请输入查找的位序:");
scanf("%d",&i);
if(LocateElemSqList(L,i))
{
printf("该位序%d的值为%d\n",i,LocateElemSqList(L,i));
}
else
{
printf("输入的位序不合法。\n");
}
}
动态顺序表的基本操作
最新推荐文章于 2022-08-06 17:47:54 发布