顺序表的基本操作
我是一个刚上大二的学生,目前在学习数据结构这门课程,有一些实训的代码,在这里给大家分享一下,有需要的可以直接选择提取。也欢迎大家给出见解,共同学习。
在九大算法之前需要对线性表进行定义和创建
- 对线性表进行定义
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
- 创建线性表
void CreateList(SqList *&L,ElemType a[],int n)
{
L=(SqList *)malloc(sizeof(SqList));
for (int i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
顺序表的九大运算
- 顺序表的初始化
void InitList(SqList *&L)
{
L=(SqList*)malloc(sizeof(SqList));//分配储存单元
L->length=0;//初始长度为零
}
- 销毁线性表
void DestroyList (SqList *&L)
{
free(L);
}
- 判断是否为空表
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
- 线性表长度
int ListLength(SqList*L)
{
return(L->length);
}
- 显示线性表
void DispList(SqList *L)
{
for (int i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
- 求第i个元素的值
int GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return false;
else
{
e=L->data[i-1];
return e;
}
}
- 查找某元素的位置
int LocateElem(SqList *L,ElemType e)
{
int i=0;
while(i<L->length &&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
- 插入
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
- 删除
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for (j=i;j<L->length;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
最后下面给大家看一下本人写的主函数
int main()
{
int n=0;
SqList *L;
ElemType a[50];
int i=0,j=0,x=0,e=0,c=0;
int h=0;
int k=0,p=0;
printf("请输入顺序表的长度:\n");
scanf("%d",&n);
printf("输入数据表中各个数据元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
CreateList(L,a,n);
printf("建立的线性表为:\n");
DispList(L);
printf("===================================================\n") ;
printf(" 1.插入一个数据。\n");
printf(" 2.删除一个数据。\n") ;
printf(" 3.得到第i个元素的值。\n") ;
printf(" 4.查找某元素的值。\n") ;
printf(" 5.结束。\n");
printf("===================================================\n") ;
while(h!=5){
printf("选择要进行的操作\n");
scanf("%d",&h);
if (h>= 1 && h<= 5) {
switch (h)
{
case 1:
printf("请输入插入的位置i<0~curLen>:\n");
scanf("%d",&j);
printf("请输入插入的位值x:\n");
scanf("%d",&x);
printf("插入后的顺序表为:\n");
ListInsert(L,j,x);
DispList(L);
break;
case 2:
printf("请输入待删除的位置i<0~curLen>:\n");
scanf("%d",&c);
ListDelete (L,c,e);
printf("删除后的顺序表为:\n");
DispList(L);
break;
case 3:
printf("输入要得到第几个元素\n");
scanf("%d",&i);
printf("第%d个元素的值为%d\n",i,GetElem(L,i,k));
break;
case 4:
printf("输入要查找的元素\n");
scanf("%d",&p);
printf("这个元素的位置是%d\n",LocateElem(L,p));
break;
case 5:break;
}
}
else printf("输入错误\n重新") ;
}
return 0;
iwei}
为了方便大家复制运行,下面给出了所有的内容,需要的朋友可以直接复制运行
#include <stdio.h>
#include <malloc.h>
#define Maxsize 50
typedef int ElemType;
typedef struct{
ElemType data[Maxsize];
int length;
}SqList;
void CreateList(SqList *&L,ElemType a[],int n)
{
L=(SqList *)malloc(sizeof(SqList));
for(int i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
void InitList(SqList *&L)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void DestoryList(SqList *L)
{
free(L);
}
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
int ListLength(SqList *L)
{
return(L->length);
}
void DispList(SqList *L)
{
for(int i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
int GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return false;
else
{
e=L->data[i-1];
return e;
}
}
int LocateElem(SqList *L,ElemType e)
{
int i=0;
while(i<L->length &&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for (j=i;j<L->length;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
int main()
{
int n=0;
SqList *L;
ElemType a[50];
int i=0,j=0,x=0,e=0,c=0;
int h=0;
int k=0,p=0;
printf("请输入顺序表的长度:\n");
scanf("%d",&n);
printf("输入数据表中各个数据元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
CreateList(L,a,n);
printf("建立的线性表为:\n");
DispList(L);
printf("===================================================\n") ;
printf(" 1.插入一个数据。\n");
printf(" 2.删除一个数据。\n") ;
printf(" 3.得到第i个元素的值。\n") ;
printf(" 4.查找某元素的值。\n") ;
printf(" 5.结束。\n");
printf("===================================================\n") ;
while(h!=5){
printf("选择要进行的操作\n");
scanf("%d",&h);
if (h>= 1 && h<= 5) {
switch (h)
{
case 1:
printf("请输入插入的位置i<0~curLen>:\n");
scanf("%d",&j);
printf("请输入插入的位值x:\n");
scanf("%d",&x);
printf("插入后的顺序表为:\n");
ListInsert(L,j,x);
DispList(L);
break;
case 2:
printf("请输入待删除的位置i<0~curLen>:\n");
scanf("%d",&c);
ListDelete (L,c,e);
printf("删除后的顺序表为:\n");
DispList(L);
break;
case 3:
printf("输入要得到第几个元素\n");
scanf("%d",&i);
printf("第%d个元素的值为%d\n",i,GetElem(L,i,k));
break;
case 4:
printf("输入要查找的元素\n");
scanf("%d",&p);
printf("这个元素的位置是%d\n",LocateElem(L,p));
break;
case 5:break;
}
}
else printf("输入错误\n重新") ;
}
return 0;
}
下面是我个人运行的结果,供大家参考
顺序表的基本内容就是这么多,欢迎各位码农给以意见和评论
l