C语言实现线性表
#include<>
#include<>
#define MAXSIZE 100 //定义线性表最大长度
/*定义顺序表*/
typedef struct
{
int data[MAXSIZE]; //线性表占用的数组空间
int length; //存储线性表的长度
}SeqList;
/*初始化顺序表*/
void InitList(SeqList *L)
{
L->length=0; //表长为零
}
/*建立顺序表*/
int CreatList(SeqList *L,int a[],int n)
{
if(n>MAXSIZE)
{
printf("空间不足,无法建立顺序表\n");
return 0;
}
for(int k=0;k<n;k++)
{
L->data[k]=a[k];
}
L->length=n;
}
/*判空顺序表*/
int Empty(SeqList *L)
{
if(L->length==0)
return 1;
else
return 0;
}
/*求顺序表的长度*/
int length(SeqList *L)
{
return L->length;
}
/*遍历顺序表*/
void printList(SeqList *L)
{
for(int i=0;i<L->length;i++)
printf("%d ",(L->data[i]));
}
/*按内容查找*/
/*在顺序表中查找到与指定值X相同的数据元素位置*/
int LocateElem(SeqList *L,int x)
{
for(int i=0;i<L->length;i++)
{
if(L->data[i]==x)
return i+1; //查找成功,返回序号(第几个元素)
}
return 0;
}
/*按序号查找*/
/*根据位置i获取相应位置数据元素的内容*/
int GetElem(SeqList *L,int i,int *e)
{//若查找成功,则通过指针参数e返回值
if(i<1||i>L->length)
{
printf("查找位置非法\n");
return 0;
}
else
{
*e=L->data[i-1]; //第i-1个位置为第i个数据
return 1;
}
}
/*插入操作*/
/*将新元素x放在第i个位置*/
/*在第i个位置上插入新结点X,使长度为n的线性表变为长度n+1*/
int InsertList(SeqList *L,int i,int x)
{
if(i<1||i>L->length+1)
{
printf("插入位置不合法\n");
return 0;
}
if(L->length==MAXSIZE)
{
printf("存储空间已满");
return 0;
}
for(int j=L->length-1;j>=i-1;j--)
//length-1(如果存入了n个元素,则最后一个元素的下标为n-1)
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=x;
L->length++;
return 1;
}
/*删除操作*/
/*将表中第i个结点删除,使线性表变为长度为n-1的线性表*/
int DeleteList(SeqList *L,int i,int *e)
{
if((i<1)||(i>L->length))
{
printf("删除位置错误\n");
return 0;
}
if(L->length==0)
{
printf("表中没有可删的元素\n");
return 0;
}
*e=L->data[i-1];//把要删除的数据返回
for(int j=i;j<=L->length-1;j++)
{
L->data[j-1]=L->data[j];
}
L->length--;
return 1;
}
/*修改操作*/
int Modify(SeqList *L,int i,int x)
{
if (i > L->length || i < 1)
{
printf("位置错误!\n");
return 0;
}
L->data[i-1] = x;//i是下标,比实际存放位置大一
return 1;
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,x;
SeqList list1;
//初始化顺序表
InitList(&list1);
if (Empty(&list1))
{
printf("初始化顺序表成功!\n");
}
printf("给顺序表赋值:1、2、3、4、5、6、7、8、9、10\n遍历并输出\n");
//建立一个长度为10的线性表
CreatList(&list1,a,10);
//遍历输出顺序表
printList(&list1);
printf("\n将100放在第三位:\n");
InsertList(&list1, 3, 100);
printList(&list1);
if (Modify(&list1, 3, 50) == 1) {
printf("\n把第三位改成50\n");
printList(&list1);
}
if (DeleteList(&list1, 4, &x) == 1) {
printf("\n把第四位删除,删除的值是%d\n",x);
printList(&list1);
}
return 0;
}