头文件包括很多顺序表的基本运算,比如:删除第i个元素起开始的k个元素、//删除第i个元素、插入元素 、按值查找、初始化线性表 等等。
代码如下:
头文件:SqList.h
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
//初始化线性表
void InitList(SqList& s)
{
s.length = 0;
}
//整体创建顺序表的算法
void CreatList(SqList& s, ElemType a[], int n)
{
int i, k = 0;
for (i = 0; i < n; i++)
{
s.data[k] = a[i];
k++;
}
s.length = k;
}
//销毁线性表
void DestoryList(SqList& s)
{
}
//获得表长度
int Getlength(SqList s)
{
return s.length;
}
//获得第i个元素
int GetElem(SqList& s, int i, ElemType& e)
{
if (i<1 && i>s.length)
return 0;
else
{
e = s.data[i - 1];
return 1;
}
}
//按值查找
int Locate(SqList s, ElemType x)
{
int i = 0;
while (i < s.length && s.data[i] != x)
{
i++;
}
if (i >= s.length)
{
return 0;
}
else
{
return i + 1;
}
}
//插入元素
int InsElem(SqList& s, ElemType x, int i)
{
int j;
if (i<1 && i>s.length)
return 0;
for (j = s.length; j >= i; j--)
s.data[j] = s.data[j - 1];
s.data[i - 1] = x;
s.length++;
return 1;
}
//删除第i个元素
int DelElem(SqList& s, int i)
{
int j;
if (i<1 && i>s.length)
{
return 0;
}
for (j = i; j < s.length; j++)
{
s.data[j - 1] = s.data[j];
}
s.length--;
return 1;
}
//删除第i个元素起开始的k个元素
int Deletek(SqList& s, int i, int k)
{
int j;
if (i < 1 || k<1 || i + k - 1>s.length)
{
return 0;
}
for (j = i + k - 1; j < s.length; j++)
{
s.data[j - k] = s.data[j];
}
s.length -= k;
return 1;
}
//打印表
void DispList(SqList s)
{
int i;
for (i = 0; i < s.length; i++)
{
printf("%d\n", s.data[i]);
}
}
源文件:main.cpp
#include"SLinkNode.h"
int main()
{
int i;
ElemType e;
SqList(s);
InitList(s);
InsElem(s, 1, 1);
InsElem(s, 3, 2);
InsElem(s, 4, 3);
InsElem(s, 5, 4);
InsElem(s, 6, 5);
printf("线性表:");
DispList(s);
printf("长度:%d\n", Getlength(s));
i = 3;
GetElem(s, i, e);
printf("第%d个元素:%d\n", i, e);
e = 1;
printf("元素%d是第%d个元素\n",e, Locate(s, e));
i = 4;
printf("删除第%d个元素\n", i);
DelElem(s, i);
printf("线性表:");
DispList(s);
DestoryList(s);
return 1;
}