数据结构与算法——顺序表应用

一、实验内容及要求

实验要求:
1.掌握线性表顺序存储结构的特点。
2.掌握线性表顺序存储结构的常见算法。
实验内容:
1.输入一组整型元素序列(不少于10个),建立顺序表。
2.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
3.判断该顺序表中元素是否对称,对称返回1,否则返回0。
4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
5.输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
7.在主函数中设计一个简单菜单,调用上述算法。

二、实验说明

1、算法1至6使用头文件定义,主函数包含该头文件。
2、存储结构定义:

#define MaxSize 100 typedef int elemType;
//定义类型
typedef struct List
{
elemType elem[MaxSize];
int size; //元素实际个数
}SeqList;

3、数据处理
采用顺序表进行存储,通过键盘输入数据,运行相关功能

三、实验结果

在这里插入图片描述

四、源代码

Seqlist.h:

#include<stdlib.h> 
#define MaxSize 100
typedef int  elemType;   //定义类型
typedef struct List
{
    elemType elem[MaxSize];
    int size;           //元素实际个数
}SeqList;
void SeqListInit(SeqList* &seq);    //初始化顺序表
void SeqListPushEnd(SeqList* &seq,elemType value);   //尾插元素
void SeqListPopPosition(SeqList* *seq, int index);   //删除下标为index的元素
int  SeqListDataInList(SeqList* &seq, elemType value);      //判断元素是否在顺序表内
int SeqListIsSym(SeqList * &seq);            //判断顺序表是否对称
void SeqListSubsection(SeqList * &seq);     //将奇数排在偶数之前
void SeqListOrderInsert(SeqList * &seq,elemType data);       //有序表插入算法
void SeqListCombineOrder(SeqList * &seq1,SeqList * &seq2,SeqList *&seq3 );    //合并两个有序表
void SeqListPrintf(SeqList * &seq );                 //输出顺序表数据

源.cpp

#include"stdio.h"
#include"string.h"
#include"malloc.h"
#include"stdlib.h"
#include"Seqlist.h"
void SeqListInit (SeqList * &seq) //初始化顺序表
{
	seq=(SeqList *)malloc(sizeof (SeqList ));
	seq->size =0;
}
void SeqListPushEnd (SeqList *&seq ,elemType data) //向顺序表中添加元素
{
	if(seq->size >=MaxSize )
	{
		printf("顺序表已满,无法插入!\n");
		return;
	}
	else
	{
		seq->elem [seq->size]=data;
		seq->size ++;
	}
}
int SeqListDataInList (SeqList *&seq,elemType data) //判断一个元素是否在顺序表内
{
	int i=0;
	for(i;i<=seq->size ;i++)
	{
		if(seq->elem [i]==data )
			return 1;
	}
	return 0;
}
int SeqListIsSym(SeqList *&seq )  //判断顺序表是否对称,对称返回1,否则返回0
{
	for(int i=0;i<=seq->size ;i++)
	{
		if(seq->elem [i]!=seq->elem [seq->size-i])
			return 0;
		if (i>=seq->size -1)
		{
			return 1;
		}
	}
}
void SeqListSubsection (SeqList *& seq) //将奇数排在偶数之前,第一个偶数与最后一个奇数交换
{
	for(int i=0;i<seq->size /2;i++)
	{
		if(seq->elem [i] %2==0)
		{
			for(int j=seq->size ;j>=0;j--)
			{
				if(seq->elem [j]%2==1)
				{
					int x=seq->elem [i];
					seq->elem [i]=seq->elem [j];
					seq->elem [j]=x;
					break;
				}
			}
		}
	}
}
void SeqListOrderInsert(SeqList * &seq,elemType data )//有序表插入算法建立有序表
{
	if(seq->size ==MaxSize )          //判断顺序表是否已满
	{
		printf("顺序表已满,无法插入!\n");
		return ;
	}
	else
	{
		if(seq->size ==0)      //判断顺序表是否为空
		{
			seq->elem [0]=data ;
			seq->size ++;
		}
		else
		{
			int i =seq->size-1;
			while(i>=0&&seq->elem[i]>=data  )       //将大于data 的元素依次后移
			{
				i--;
			}
			for(int j=seq->size -1;j>=i+1;j--)
				seq->elem [j+1]=seq->elem [j];
			seq->elem [i+1]=data;
			seq->size ++;
		}
	}
}
void SeqListCombineOrder (SeqList *&seq1,SeqList *&seq2 ,SeqList *&seq3)   //利用有序插入算法将其中一个表插入另外一个表
{
	seq3 =seq1 ;
	for(int i=0;i<seq2->size ;i++)
	{
		SeqListOrderInsert (seq3 ,seq2 ->elem [i]);
	}
}
void SeqListPrintf (SeqList *&seq)
{
	for(int i=0;i<seq->size ;i++)
		printf("%d ",seq->elem [i]);
}
int main()
{
	int length=10;
	elemType data=0;
	SeqList *List1,*List2,*List3,*List4;
	SeqListInit(List1);
	SeqListInit (List2 );
	SeqListInit (List3 );
	SeqListInit (List4 );
	printf("请输入%d个数据:\n",length);
	scanf("%d",&data);
	for(int i=0;i<length ;i++)
	{
		SeqListPushEnd (List1 ,data );
		scanf("%d",&data );
	}
	printf("\n当前顺序表数据为:\n");
	SeqListPrintf (List1);
	if(SeqListDataInList(List1 ,5))
		printf("\n数据5在顺序表List1中\n");
	else
		printf("\n数据5不在顺序表List1中\n");
	if(SeqListIsSym (List1 ))
		printf("List1是对称顺序表\n");
	else
		printf("List1不是对称顺序表\n");
	SeqListSubsection (List1 );
	printf("进行奇偶分段后的顺序表为:\n");
	SeqListPrintf (List1 );
	printf("\n请输入%d个数据,建立有序表一:\n",length);
	scanf("%d",&data);
	for(int i=0;i<length ;i++)
	{
		SeqListOrderInsert (List2 ,data );
		scanf ("%d",&data );
	}
	printf("有序表1 的数据为:\n");
	SeqListPrintf (List2);
	printf("\n请输入%d个数据,建立有序表二:\n",length);
	scanf("%d",&data);
	for(int i=0;i<length ;i++)
	{
		SeqListOrderInsert (List3 ,data );
		scanf ("%d",&data );
	}
	printf("有序表2的数据为:\n");
	SeqListPrintf (List3);
	SeqListCombineOrder (List2 ,List3 ,List4 );
	printf("\n合并后的有序表的数据为:\n");
	SeqListPrintf (List4);
	system("pause");
	return 0;
}

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页