创建一个顺序表, 向顺序表中插入元素,查找顺序表中的元素(按值查找和按序号查找),删除顺序表中的某个元素,输出顺序表中的元素算法:
#include <stdio.h>
#include <stdlib.h>
#define ListSize 100
typedef int ListData;
typedef struct
{
ListData *data;
int length;
}SeqList;
void InitList(SeqList &L)//初始化顺序表
{
L.data=(ListData*)malloc(ListSize*sizeof(ListData));
if(L.data==NULL)
{
printf("存储分配失败\n");
exit(1);
}
L.length=0;
}
void CreatList(SeqList &L)//创建顺序表
{
printf("要创建顺序表的长度为:\t");
scanf("%d",&L.length);
printf("Please input your elements:\n");
for(int i=0;i<L.length;i++)
scanf("%d",&L.data[i]);
}
void InsertList(SeqList &L,ListData x,int i)//向顺序表中插入元素
{
if(i<0||i>L.length||L.length==ListSize)
printf("插入失败\n");
else
{
for(int j=L.length;j>i;j--)
L.data[j]=L.data[j-1];
L.data[i]=x;
L.length++;
}//插入成功
}
int FindByValue(SeqList &L,ListData x)//按值查找
{
int i=0;
while(i<L.length&&L.data[i]!=x)
i++;
if(i<L.length) return i;//查找成功
else {printf("查找失败\n");return -1;}//查找失败
}
int FindByNumber(SeqList &L,int i)//按序号查找
{
if(i<0||i>=L.length)
{
printf("查找失败\n");
return -1;
}
else return L.data[i];
}
void DeleteList(SeqList &L,ListData x)//删除顺序表中的元素
{
int i=FindByValue(L,x);
if(i>=0)
{
L.length--;
for(int j=i;j<L.length;j++)
L.data[j]=L.data[j+1];
}
else printf("删除失败\n");//表中没有x
}
void ShowList(SeqList L)//输出顺序表的元素
{
printf("输出顺序表中的元素:\n");
for(int i=0;i<L.length;i++)
printf("%d\t",L.data[i]);
printf("\n");
}
int main()
{
SeqList L;
InitList(L);
CreatList(L);
int m,n;
printf("要插入的元素及插入位置分别为:\t");
scanf("%d%d",&m,&n);
InsertList(L,m,n);
ShowList(L);
printf("要查找元素值为:\t");
scanf("%d",&m);
n=FindByValue(L,m);
if(n>=0) printf("按值查找该元素的位置为:\t%d\n",n);
printf("要查找元素位置为:\t");
scanf("%d",&n);
m=FindByNumber(L,n);
if(m>=0) printf("按序号查找该位置的元素值为:\t%d\n",m);
printf("要删除元素值为:\t");
scanf("%d",&m);
DeleteList(L,m);
ShowList(L);
return 0;
}
运行结果: