1、顺序表的定义
#define MAXSIZE 50 //定义顺序表容量
typedef struct {
int data[MAXSIZE]; //存放顺序表的元素
int length; // 顺序表实际长度
}SqList;//顺序表名称 命名形式 :typedef SqList SqList;
2、顺序表的基本运算 :
1)初始化线性表运算:
//将顺序表的L的length域置为0
void InitList(SqList &L)
{
L.length = 0;
}
2)求线性表的长度运算
int GetLength(SqList L)
{
return L.length;
}
3)求线性表中第i个元素运算,
//在i有效时返回0,无效时返回 1,并用e存储第i个元素的值。
int GetElem(SqList L,int i,int &e)
{
if ( i < 0 || i > L.length )
return 0;
else
{
e = L.data[i - 1];
return 1;
}
}
4)按值查找运算
//在顺序表中查找第一个值为x的元素,并返回其位置,若未找到,则返回0 。
int Locate(SqList L, int x) //按值查找
{
int i = 0;
while (L.data[i] != x)
i++;
if (i > L.length)
return (0); //未找到
else
return (i+1);
}
5)插入元素运算
//在i无效时返回0,有效时,将L.data[i]~L.data[L.length-1]后移一个位置,在L.data[i-1]处插入x,顺序表长度增1,并返回1;
int InsElem(SqList &L,int x,int i)
{
int j;
if (i < 1 || i > L.length + 1) //无效的参数i
return 0;
for (j = L.length; j > i; j--) //将位置为i的节点及之后的节点后移
L.data[j] = L.data[j - 1];
L.data[i - 1] = x;
L.length++;
return 1;
}
6)删除元素运算
//在i无效时返回0,有效时,将L.data[i]~L.data[L.length-1]前移一个位置,顺序表的长度减一,斌返回1.
int DelElem(SqList &L,int 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;
}
7)输出线性表运算
//扫描顺序表,输出个元素的值
void DisList(SqList L)
{
int i;
for (i = 1; i <= L.length; i++)
printf("%c",L.data[i-1]);
printf("\n");
}
主函数部分:
void main() {
int l;
int e;
SqList L;
InitList(L);
InsElem(L,'a',1);
InsElem(L, 'b', 2);
InsElem(L, 'c', 3);
InsElem(L, 'd', 4);
InsElem(L, 'e', 5);
InsElem(L, 'f', 6);
printf("线性表:");
DisList(L);
printf("长度为:%d\n", GetLength(L));
int i = 3;
GetElem(L, i, e);
printf("第%d个元素为:%c\n", i, e);
e = 'a';
printf("元素%c是第%d个元素\n", e, Locate(L,e));
i = 4;
printf("删除第%d个元素\n",i);
DelElem(L, i);
printf("线性表:");
DisList(L);
getchar();
}