#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20
typedef int datatype;
typedef struct list{
datatype data[MaxSize]; //MaxSize 是顺序表总长度-数组总元素个数
int length; // 顺序表的当前长度
}sequenlist;
//通过已知数组元素创建顺序表
void creatlist( sequenlist *seqlist )
{ int i;
int a[10]={34,23,67,43,23,87,23,67,92,12};
seqlist->length =0;
for(i=1;i<=10;i++)
{
if(Insert(seqlist,i,a[i-1])==-1) printf("error!\n");
}
}
//通过键盘输入创建顺序表
void creatlist2( sequenlist *seqlist )
{ int i;int n;
datatype x;
seqlist->length =0;
printf("请输入要输入的元素个数:");
scanf("%d",&n);
printf("请输入各元素的值:");
for(i=1;i<=n;i++)
{
scanf("%d",&x);
if(Insert(seqlist,seqlist->length+1 ,x)==-1) printf("error!\n");
}
}
//显示顺序表中所有元素的值
void displaylist(sequenlist *seqlist)
{ int i;
// 判断是否是空表
if(seqlist->length<=0)
{
printf("抱歉,目前表中没有元素!");
return ;
}
// 若是非空表,则输出各元素
printf("目前的数据元素有:");
for(i=0;i<seqlist->length;i++)
{
if(i%10==0) printf("\n");
printf("%d ",seqlist->data[i]);
}
printf("\n\n");
}
//在位置index位置上插入值为x的元素 ,插入异常则返回-1
int Insert(sequenlist *seqlist, int index, datatype x)
{
int j;
if (seqlist->length>=MaxSize) return -1;
if (index<1 || index>(seqlist->length+1)) return -1;
for (j=seqlist->length; j>=index; j--)
seqlist->data[j]=seqlist->data[j-1];
seqlist->data[index-1]=x;
seqlist->length++;
return 1;
}
//删除位置index上的元素
int Delete(sequenlist *seqlist, int index)
{
int j;
if (seqlist->length<=0) return -1;
if (index<1 || index>(seqlist->length)) return -1;
for (j=index; j<=seqlist->length; j++)
seqlist->data[j-1]=seqlist->data[j];
seqlist->length--;
return 1;
}
//查看位置index上的元素的值
datatype getItem(sequenlist *seqlist, int index)
{
if (index>=1 && index<=(seqlist->length))
return (seqlist->data[index-1]);
}
//查找值为x的元素是否存在,若存在返回其位置,否则给出提示信息
int Locate(sequenlist *seqlist, datatype x)
{
int i; //下标
for (i=0; i<seqlist->length; i++)
if (seqlist->data[i]==x) return (i+1);
return 0;
}
本系列所指的“位置”,都是按日常习惯,从1开始。
4. 删除算法:将被删除位置之后的元素逐一往前覆盖
5. 删除位置不合法 a. seqlist->length < 1 表空 b. index<1 || index>(seqlist->length) 小于1肯定不合法,超出表长自然也不合法
6. 凡是涉及用户输入的,都需要对用户输入进行合法性检验