删除顺序表前i个元素。 已知顺序表的数据结构如下:

删除顺序表前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.

猜你喜欢

转载自blog.csdn.net/qq_44880154/article/details/110579067