数据结构——线性表:顺序表
1.Definition:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
2.代码
注意事项有以下几点:
A.以下诸多函数返回值为用typedef定义的ERROR和OK的整形数据。
B.插入函数注意插入条件的判断以及中间变量的取值范围!
C.删除函数注意判断删除点是否在顺序线性表尾部。
(1)定义包括存储容量,线性表长度等
#define MAXSIZE 20
#define ERROR 0
#define OK 1
typedef struct
{
int data[MAXSIZE];
int length;
}Sqlist;
(2)获得元素函数
int getelement(Sqlist L, int i, int * e) //获取L中第i个元素
{
if (i<1 || i>L.length || L.length == 0)
return ERROR;
*e = L.data[i - 1];
return OK;
}
(3)插入函数
算法思路如下图所示
int listinsert(Sqlist * l, int i, int e)
{
int k;
int len = l->length;
if (l->length == MAXSIZE)
return ERROR;
if(i<1||i>l->length+1)
return ERROR;
if (i <= l->length) //若插入数据不在表尾
{
for (k = len; k >= i; k--)
{
l->data[k] = l->data[k - 1];
}
}
l->data[k] = e; //将新元素插入,在表尾时即直接插入。
l->length++;
return OK;
}
(4)删除函数
int listdelete(Sqlist *l, int i) //删除操作函数
{
int k;
if (i<1 || i>l->length)
return ERROR;
if (l->length == 0)
return ERROR;
if (i < l->length) //这个if可以省略,因为是不是删除最后位置对下面程序没有影响
{
for (k = i; k < l->length; k++)
{
l->data[k - 1] = l->data[k];
}
}
l->length--;
return OK;
}
(5)显示函数
void listdisplay(Sqlist * l) //显示函数
{
int i;
for (i = 0; i < l->length; i++)
{
printf(" %d", l->data[i]);
}
printf("\n");
}
(6)main函数
int main()
{
int getelement(Sqlist L, int i, int * e); //获取元素函数
int listinsert(Sqlist * l, int i, int e); //插入函数
void listdisplay(Sqlist * l); //显示函数
int listdelete(Sqlist *l, int i); //删除操作函数
Sqlist L,*l;
int n,i;
int e[10]; //如果定义了一个指针一定要初始化指向一个地址
int snumber;
int location,elem;
L.length = 0;
scanf_s("%d", &n); //输入顺序表长度
for (i = 0; i < n; i++) //输入顺序表中元素
{
scanf_s("%d", &L.data[i]);
L.length++;
}
scanf_s("%d", &snumber); //输入寻找的序数
getelement(L, snumber, e);
printf("The %d of the sequence list is %d\n", snumber, e[0]);
printf("Please enter the location and the element:");
scanf_s("%d %d", &location, &elem);
l =& L;
listinsert(l, location, elem);
listdisplay(l);
return 0;
}