数据结构实验——基于数组表的实验

实验内容

1.编写程序实现顺序表的下列基本操作:
    (1) 初始化顺序表La。
    (2) 在顺序表中插入元素形成表[ 10 20 30 40 50],并输出表。
    (3) 删除表中第3个元素,并输出表
    (4) 删除元素40,并输出表
    (5)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
    (6)打印输出La中的元素值。

2.编写程序完成下面的操作:
    (1)构造两个顺序线性表LaLb,其元素都按值非递减顺序排列。
    (2)实现归并LaLb得到新的顺序表LcLc的元素也按值非递减顺序排列。

定义结构体

typedef struct {
    int data[maxSize];//表的数据
    int length;//表的长度,从1开始
}seqlist;

声明所需函数

// 通过索引将数据插入到指定位置
void insertContentByIndex (seqlist *list,int content,int index);

// 在表尾插入数据,类似于堆栈的push方法
void insertContent (seqlist *list,int content);

// 通过索引删除表中的数据
void deleteByIndex (seqlist *list,int index);

// 通过内容删除表中的数据
void deleteByContent (seqlist *list,int content);

// 找出表中第一次出现content的索引
int findFirstContentToIndex (seqlist *list,int content);

// 打印表的数据data
void printList (seqlist *list);

主函数实现指定功能

int main ()
{
    seqlist La;
    La.length = 0;

    // 在顺序表中插入元素形成表[ 10 20 30 40 50],并输出表。
    insertContent(&La , 10);
    insertContent(&La , 20);
    insertContent(&La , 30);
    insertContent(&La , 40);
    insertContent(&La , 40);
    insertContent(&La , 50);
    printList(&La);

    // 删除表中第3个元素,并输出表
    deleteByIndex(&La , 3);
    printList(&La);

    // 删除元素40,并输出表
    deleteByContent(&La , 50);
    printList(&La);

    insertContentByIndex(&La , 80 , 3);
    printList(&La);

    /*在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。*/
    findFirstContentToIndex(&La , 50);
    return 0;
}

程序源代码

// 基于数组的表实验

#include <stdio.h>

#define maxSize 10

typedef struct {
    int data[maxSize];
    int length;
}seqlist;

void insertContentByIndex (seqlist *list,int content,int index);
void insertContent (seqlist *list,int content);

void deleteByIndex (seqlist *list,int index);
void deleteByContent (seqlist *list,int content);

int findFirstContentToIndex (seqlist *list,int content);

void printList (seqlist *list);

int main ()
{
    seqlist La;
    La.length = 0;

    insertContent(&La , 10);
    insertContent(&La , 20);
    insertContent(&La , 30);
    insertContent(&La , 40);
    insertContent(&La , 40);
    insertContent(&La , 50);
    printList(&La);

    deleteByIndex(&La , 3);
    printList(&La);

    deleteByContent(&La , 50);
    printList(&La);

    insertContentByIndex(&La , 80 , 3);
    printList(&La);

    findFirstContentToIndex(&La , 50);
    return 0;
}

void insertContentByIndex (seqlist *list,int content,int index)
{
    if (index > maxSize && list->length >= maxSize)
    {
        printf("超出表的限定范围\n");
        return;
    }

    int i = list->length;
    for ( ;i >= index; i--)
    {
        list->data[i] = list->data[i-1];
    }

    list->data[index-1] = content;

    list->length ++;
    printf("数据%d 插入在%d 成功\n",content,index);
}

void insertContent (seqlist *list,int content)
{
    if(list->length >= maxSize)
    {
        printf("表已经满了,无法插入新数据\n");
        return;
    }
    list->data[list->length] = content;

    list->length ++;
    printf("数据%d\tpush成功\n",content);
}

void deleteByIndex (seqlist *list,int index)
{
    int i = index - 1 ;
    int content = list->data[index-1];
    for (; i < list->length - 1; i++)
    {
        list->data[i] = list->data[i+1];
    }
    list->length --;
    printf("数据%d删除成功\n",content);
}

void deleteByContent (seqlist *list,int content)
{
    int i = 0;
    while(i<list->length)
    {
        if (list->data[i] == content){
            deleteByIndex(list,i+1);
        }else{
            i++;
        }
    }
    /*表发生相应改变,无法进行后续的删除
    for (i=0 ; i<list->length ; i++)
    {
        if (list->data[i] == content)
        {
            deleteContent(list,i+1);
            // 删除第一个后,表发生了改变,无法删除第二个相同的元素
        }
    }
    */
}

int findFirstContentToIndex (seqlist *list,int content)
{
    int i;
    for (i=0 ; i<list->length ; i++)
    {
        if (list->data[i] == content)
        {
            printf("该数据第一次出现在表中第%d个位置\n",i+1);
            return i+1;
        }
    }
    printf("没有找到该数据%d\n",content);
    return 0;
}

void printList(seqlist *list)
{
    int i;
    printf("表内容为:\t");
    for (i = 0; i < list->length; i++)
    {
        printf("%d\t",list->data[i]);
    }
    printf("\n");
}

运行结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/pengshaob/article/details/70267371
今日推荐