线性表的顺序存储实现c语言

线性表的顺序存储指的是

用一组地址连续的存储单元

依次存储线性表的基本元素。

#include<stdio.h>

#include<malloc.h>
#define ListSize 10
typedef struct SqList{
int *elem; //线性表存储空间基址
int length;
int listsize;
}SqList;
bool InitList(SqList &L)
{
L.elem=(int *)malloc(ListSize*sizeof(int));
/* L.elem=new int[ListSize]; */   //都是以数组形式存储元素
if(!L.elem) return false;
else{
L.length=0;
L.listsize=ListSize;
return true;
}
}
int GetLength(SqList L)   //得到表长
{
return L.length;
}
void GetElem(SqList L,int i,int &elem)  //得到第i个元素
{
    elem=L.elem[i-1];
}
int LocateElem(SqList L,int elem)       //判断是否有elem的值相同元素并返回元素序号   
{
for(int i=0;i<L.length;i++)
{
if(L.elem[i-1]==elem) 
{
    return i;
break;
}
}
return 0;
}
bool InsertList1(SqList &L,int i,int elem) //插入第i个元素前即L.elem[i-1]前
{
if(i<1||i>L.length+1) return false;   //当i=length+1时即原有最后的元素后一个
if(L.length>=L.listsize)   
{
int *newbase;
newbase=(int *)realloc(L.elem,(L.listsize+ListSize)*sizeof(int));//表满满时length=listsize
if(!newbase) return false;
L.elem=newbase;
}
for(int j=L.length;j>i;j--)  L.elem[j]=L.elem[j-1]; //移动i个元素
    L.elem[i-1]=elem;
L.length++;
return true;
}
bool InsertList2(SqList &L,int i,int elem) //插入第i个元素后即L.elem[i-1]后
{
if(i<1||i>L.length) return false;   //当i=length+1时即原有最后的元素后一个
if(L.length>=L.listsize)   
{
int *newbase;
newbase=(int *)realloc(L.elem,(L.listsize+ListSize)*sizeof(int));//表满满时length=listsize
if(!newbase) return false;
L.elem=newbase;
}
for(int j=L.length;j>=i;j--)  L.elem[j]=L.elem[j-1]; //移动i-1个元素
    L.elem[i]=elem;
L.length++;
return true;
}
bool DeleteList(SqList &L,int i,int &elem)  //删除第i个元素并将值赋予elem
{
if(i<1||i>L.length) return false;
elem=L.elem[i-1];
for(int j=i;j<L.length;j++) L.elem[j-1]=L.elem[j];
L.length--;
return true;
}
void ListTraverse(SqList L)       //表的遍历
{
for(int i=0;i<L.length;i++)
{
printf("%i ",L.elem[i]);
}
printf("\n");
}
int main()
{
int temp=0;
SqList A;
InitList(A);
InsertList1(A,1,3);
InsertList1(A,2,6);
InsertList2(A,2,2);
InsertList2(A,3,3);
printf("表A长度:");
printf("%i\n",GetLength(A));
printf("表A:");
ListTraverse(A);
printf("删除元素为:");
DeleteList(A,1,temp);
printf("%i\n",temp);
printf("表A:");
ListTraverse(A);
return 0;
}

猜你喜欢

转载自blog.csdn.net/lin1094201572/article/details/78705025
今日推荐