删除顺序表前i个元素。已知顺序表的数据结构如下:
#define MaxSize 100
typedef struct
{
int data[MaxSize];
int last;
} SeqList;
使用如下函数原型:
bool fnDelete( SeqList *L, int i );
//成功删除则返回true,否则返回false
设计算法并在主函数调用:
#include <stdio.h>
#include <stdbool.h>
// 删除顺序表前i个元素
#define MaxSize 10
typedef struct
{
int data[MaxSize]; // 顺序表元素,
int last; // 最后一个元素下标
} SeqList;
bool fnDelete(SeqList *L, int i);
int main()
{
SeqList list;
SeqList *lp; // 将作为传入的第一个指针参数
int last = 0, index = 0;
for (int i = 0; i < MaxSize; i++, last++)
{
list.data[index++] = i;
}
list.last = last - 1;
puts("sequential list before del:");
for (int i = 0; i < MaxSize; i++)
{
printf("list.data[%d] = %d.\n", i, list.data[i]);
}
lp = &list;
bool result = fnDelete(lp, 3); // 0->error
puts("sequential list after del:");
for (int i = 0; i < MaxSize; i++)
{
printf("list.data[%d] = %d.\n", i, list.data[i]);
}
printf("result = %d.\n", result);
return 0;
}
bool fnDelete(SeqList *L, int i)
{
if (i > L->last + 1 || i < 1)
{
puts("del error!");
return false;
}
for (int j = 0; j < i; j++)
{
L->data[j] = 0;
}
puts("del success!");
return true;
}
result:
sequential list before del:
list.data[0] = 0.
list.data[1] = 1.
list.data[2] = 2.
list.data[3] = 3.
list.data[4] = 4.
list.data[5] = 5.
list.data[6] = 6.
list.data[7] = 7.
list.data[8] = 8.
list.data[9] = 9.
del success!
sequential list after del:
list.data[0] = 0.
list.data[1] = 0.
list.data[2] = 0.
list.data[3] = 3.
list.data[4] = 4.
list.data[5] = 5.
list.data[6] = 6.
list.data[7] = 7.
list.data[8] = 8.
list.data[9] = 9.
result = 1.