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

来源:互联网 发布:申请淘宝店铺号步骤 编辑:程序博客网 时间:2024/06/08 20:17

实验内容

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);// 打印表的数据datavoid 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 10typedef 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");}

运行结果

这里写图片描述

1 0
原创粉丝点击