您的位置:首页 > 理论基础 > 数据结构算法

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

2017-04-20 16:19 543 查看

实验内容

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

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


定义结构体

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");
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐