一个简单顺序表的基本操作
#include <stdio.h>
#include <stdlib.h>
#define Max_Size 100 /*线性表可能达到的最大长度*/
typedef int DataType;
typedef struct List
{
DataType data[Max_Size]; /*用于存放数据元素数组 */
int length; /* 当前表长度*/
}SeqList;
void InitList (SeqList &L)
{ L.length=0;
}
int Locate(SeqList L, DataType y)
{
int i=0;
while ((i<=L.length) &&(L.data[i]!=y)) /*顺序搜索表中的数据元素,直到找到*/
/*值等于y数据元素,或搜索到表尾而没找到*/
i++;
if (i>L.length)
return (0);
else
return(i);
}
/*静态数组存储结构下进行插入操作*/
void InsList(SeqList &L, int i, DataType y)
{ int j;
if(i<1||i>L.length+1) /*若i越界则插入失败*/
return;
for(j=L.length+1;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=y;
L.length++;
return;
}
void DispList(SeqList L)
{ int i;
for(i=1;i<=L.length;i++)
printf("%c",L.data[i-1]);
printf("\n");
}
DataType DelList(SeqList &L, int i, DataType &y)
{ int j;
y=L.data[i-1];/*因为数组的下标从0开开始,线性表的位置是从1开始*/
if(i<1||i>L.length)
exit(1);/* 执行此函数中止程序运行,此函数在stdlib.h中有定义 */
for(j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return y;
}
int DelElem(SeqList &L,DataType i) /*删除指定位置的数据元素*/
{ int j;
if(i<1||i>L.length)
return 0;
for(j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return 1;
}
int DelElemV(SeqList &L,DataType y) /*删除指定的数据元素*/
{
int i, j;
/* 从线性表中顺序查找出值为x的第一个元素 */
for(i = 0; i < L.length; i++){
if(L.data[i] == y){
break;
}
}
/* 若查找失败,表明不存在值为x的元素,返回0 */
if(i == L.length){
return 0;
}
/* 删除值为x的元素L->list[i] */
for(j = i + 1; j < L.length; j++){
L.data[j-1] = L.data[j];
}
L.length--;
return 1;
}
void main()
{
//验证
SeqList L;
DataType x;
InitList(L);
InsList(L,1,'a');
InsList(L,2,'c');
InsList(L,3,'a');
InsList(L,4,'e');
InsList(L,5,'d');
InsList(L,6,'b');
DispList(L);
printf("\n");
InsList(L,1,'y');
DispList(L);
printf("\n");
DelElem(L,3);
DispList(L);
printf("\n");
DelElemV(L,'a');
DispList(L);
printf("\n");
printf("%c",L.data[Locate(L, 'e')]);
printf("\n");
DispList(L);
printf("\n");
printf("%c",DelList(L, 3, x));
}