线性表的基本操作

线性表的基本操作 (C语言)

/#include <stdio.h>
/#include <stdlib.h>
/#define Initsize 5

//typedef 重命名struct为 SqList
typedef struct{
int *data; //指示动态分配数组的指针
int Maxsize;//顺序表的最大长度
int length; //顺序表的当前长度
}SqList;

void InitList(SqList &L){
L.data= (int )malloc(Initsizesizeof(int));
L.length=0;
L.Maxsize = Initsize;
}

//冒泡排序 从小到大
void SortList(SqList &L){
int t;
printf("冒泡排序后如下: ");
for(int i=0; i<L.length-1; i++){
for(int j=0; j<L.length-1-i; j++){
if(L.data[j]>L.data[j+1])
{
t = L.data[j];
L.data[j] = L.data[j+1];
L.data[j+1]=t;
}
}
}
}
//在第i个位置插入 一个数值
bool Listinsert(SqList &L,int i,int e){
printf("~~~~~~~~~~~ ");
printf("数据长度:%d ", L.length);
if(i<1||i>L.length+1)//判断要插入的位置是否合法
return false;
if(L.length>=L.Maxsize)//判断数组是否已满 等于的时候数组也已经满了
return false;
for(int j=L.length; j>=i; j--){//for循环 从最后一个往下移动 此时j=L.length 刚好 为数组的最后一个的下一个位置。
L.data[j] = L.data[j-1];
}
//printf("22 ");
L.data[i-1] = e;//移动完成后 把数值插入数组位置为i-1 的下标位置
L.length++;//此时数组的长度要增加一。
return true;
}

void printList(SqList &L){
for(int i=0; i<L.length; i++){
//scanf("%d",&L.data[i]);
printf("data[%d]=%d ",i,L.data[i]);
}
}
//查找元素并返回元素的地址;
int FindList(SqList &L,int i){
// printf("%d ",L.length);
for(int j=0; j<L.length; j++)
if(L.data[j]==i)
printf("已找到%d元素,其对应的位置是%d ",i,j+1);
return 0;
}
//用malloc函数对数组进行扩容:其原理是重新申请(L.Maxsize+len)的长度的内存空间。 再把之前的数据复制过去。
void IncreaseSize(SqList &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;//修改Maxsize的值。
// printf("221 ");
free(p);//释放原来的内存。
}

//删除指定位序的所对应的值
bool deleteList(SqList &L, int i, int &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];
L.length--;
return true;
}

int main()
{
SqList L;
InitList(L);
int n,a;
printf("请输入数据个数:");
scanf("%d", &n);
if(n>=Initsize)//如果输入数据的数量>Initsize 则进行扩容。 (存在问题:之前申请的内存没有释放)
L.data = (int )malloc((L.Maxsize+n)sizeof(int));
L.Maxsize = L.Maxsize+n;
printf("此时数组的最大容量是%d ",L.Maxsize);
printf("请输入一组数据: ");
for (int i = 0; i < n; i++){
scanf("%d",&L.data[i]);
L.length++;
}

printList(L);//输出线性表 
SortList(L);//对数组进行冒泡排序 
printList(L);
Listinsert(L,4,0);//插入数据 
printf("在第4个位置成功插入数据'0'!
");
printf("此时新的线性表为:
");
printList(L);
int e=-1;
if(deleteList(L,6,e)){
	printf("已经成功删除第6个元素,对应的值是%d
",e);
}//删除元素 
else 
	printf("删除失败!!"); 
printf("删除后的线性表为:
");
printList(L);	
FindList(L,4);//按位查找 
IncreaseSize(L,5);//用malloc函数动态扩容。 
	
printf("经过扩容后最终Maxsize为:%d
",L.Maxsize); 

// for(int i=0; i<L.Maxsize; i++){
// //scanf("%d",&L.data[i]);
// printf("data[%d]=%d ",i,L.data[i]);
// }

return 0;

}

原文地址:https://www.cnblogs.com/weisai123/p/14676894.html