来一个C语言版本顺序表完整操作
#include <stdio.h>
#define MAXLEN 100 /*定义常量MAXLEN为 100表示存储空间总量*/
typedef int DataType; /*定义DataType为int类型*/
typedef struct /*顺序表存储类型*/
{ DataType data[MAXLEN]; /*存放线性表的数组*/
int Length; /*Length是顺序表的长度*/
}SeqList;
SeqList L; /*定义一个顺序表L*/
void InitList( SeqList *L )
{ /*初始化顺序表L函数*/
L->Length=0; /*初始化顺序表为空*/
}
void CreateList(SeqList *L,int n)
{ /*建立顺序表并输入多个元素函数*/
int i;
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);
L->Length=i; /*设线性表的长度为i*/
}
int GetElem(SeqList *L, int i, DataType *x)
{ /*获取顺序表中第i位中元素函数*/
if (i<1 || i>L->Length) /*当查找位置i不正确时*/
return 0;
else
{ *x = L->data[i-1]; /*将顺序表中第i个元素值赋给指针x所指变量*/
return 1;
}
}
int Locate(SeqList *L, DataType x)
{ /*在顺序表L中定位元素x函数*/
int i=0;
while(i<L->Length && L->data[i]!= x)
i++;
if (i>=L->Length)
return 0;
else
return i+1; /*返回的是元素位置*/
}
int InsElem(SeqList *L, int i, DataType x)
{ /*在顺序表L中在第i位中插入新元素x函数*/
int j;
if (L->Length>=MAXLEN)
{ printf ("顺序表已满!");
return -1; /*表满,不能插入*/
}
if (i<1 || i>L->Length+1) /*检查给定的插入位置的正确性*/
{ printf("插入位置出错!");
return 0;
}
if (i == L->Length+1) /*插入的位置为表尾,则不需移动直接插入即可*/
{ L->data[i-1]=x;
L->Length++;
return 1;
}
for (j=L->Length-1; j>=i-1; j--) /*插入表中某位置,则插入点后各结点后移*/
L->data[j+1]=L->data[j];
L->data[i-1]=x; /*新元素插入*/
L->Length++; /*顺序表长度增1 */
return 1; /*插入成功,返回*/
}
int DelElem (SeqList *L, int i, DataType *x)
{ /*在顺序表L中删除第i位元素函数*/
int j;
if (L->Length==0)
{ printf ("顺序表为空!");
return 0; /*表空,不能删除*/
}
if (i<1 || i>L->Length) /*检查是否空表及删除位置的合法性*/
{ printf ("不存在第i个元素");
return 0;
}
*x= L->data[i-1]; /*用指针变量*x返回删除的元素值*/
for(j=i;j<L->Length;j++) /*结点移动*/
L->data[j-1]=L->data[j];
L->Length--; /*顺序表长度减1*/
return 1; /*删除成功,返回*/
}
void DispList(SeqList *L)
{ /*显示输出顺序表L的每个元素函数*/
int i;
for(i=0;i< L->Length;i++)
printf("%5d ", L->data[i]);
}
int main()
{
int r,index,first;
//初始化空表
InitList(&L);
//像表中写入5个整数
CreateList(&L,5);
printf("L的长度为%d\n",L.Length);
//按位置查找
GetElem(&L,3,&r);
printf("第3个元素是%d\n",r);
//按值查找
index = Locate(&L,30);
printf("30是第%d个元素\n",index);
//插入100在第1个位置
InsElem(&L,1,100);
printf("第1个元素是%d第2个元素是%d\n",L.data[0],L.data[1]);
//删除元素
DelElem(&L,1,&first);
printf("删除了第1一个元素%d,删除以后第1个元素是%d\n",first,L.data[0]);
//展示元素内容
DispList(&L);
return 0;
}