/*
顺序表(数组实现)
2018.12.04 编写
*/
#include<stdio.h>
#define MAXSIZE 1000
typedef struct
{
int data[MAXSIZE];//数组元素
int length;//数组长度
}SequenceList;
//初始化、并进行元素赋值
void init(SequenceList *L)//传址调用
{
printf("请输入数组表的长度:");
scanf("%d", &(L->length) );
printf("请输入数组表的元素(空格隔开):");
for (int i = 0; i < L->length; i++)
{
scanf("%d", &(L->data[i]));
}
}
//打印数组表元素
void print(SequenceList L)//传值调用
{
printf("打印数组表:");
for (int i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
printf("\n");
}
//获取插入位置
int getInsertPosition(SequenceList L, int element)//传值调用
{
int i;
for (i = 0; i < L.length; i++)
{
if (element <= L.data[i])
return i;
}
return i;
}
//获取删除位置
int getdeletePosition(SequenceList L, int element)//传值调用
{
for (int i = 0; i < L.length; i++)
{
if (element == L.data[i])
return i;
}
}
//插入元素
void insertElement(SequenceList *L)//传址调用
{
int element;
printf("请输入要插入的数字:");
scanf("%d", &element);
int insertPosition = getInsertPosition(*L, element);
/*找到插入位置,从表末到插入位置的元素依次后移一位,最后插入位置插入元素,表长+1 */
for (int i = L->length; i >= insertPosition; i--)
{
L->data[i + 1] = L->data[i];
}
L->data[insertPosition] = element;
(L->length)++;
}
//删除元素
void deleteElement(SequenceList *L)//传址调用
{
int element;
printf("请输入要删除的数字:");
scanf("%d", &element);
int deletePosition = getdeletePosition(*L, element);
/*找到删除位置,从删除位置开始,后面元素依次覆盖前面元素即可,表长-1 */
for (int i = deletePosition; i < (L->length)-1; i++)
{
L->data[i] = L->data[i + 1];
}
(L->length)--;
}
int main()
{
SequenceList L;
init(&L);
print(L);
insertElement(&L);
print(L);
deleteElement(&L);
print(L);
return 0;
}