码迷,mamicode.com
首页 > 其他好文 > 详细

河南理工大学14级数据结构第一次上机实验课题试验

时间:2015-09-23 23:17:44      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 1000
#define MAXM 10
using namespace std;
typedef int Status;
bool flag;
int Lx[MAX],Ly[MAX],L3[MAX<<1];
int lengtha,lengthb,n,m,x,k;
typedef struct
{
	int *elem;
	int length;//当前表中元素的个数(肯定小于数组单元的个数)
	int listsize;//当前顺序表中数组单元的个数
}sqlist;
Status initlist(sqlist &L)//创建线性表 
{
	L.elem=(int *)malloc(sizeof(sqlist)*MAX);//=ElemType[MAX];
	if(!L.elem) return -1;
	L.length=0;
	return 1;
}
Status listshuru(sqlist &L)//输入数据 
{
	int val;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&val);
		L.elem[i]=val;
		L.length++;
	}
	return 1;
}
void paixu(sqlist &L)//排序 
{
	sort(L.elem,L.elem+n);
	//return 1;
}
Status panduanrong(sqlist &L)//判断是否需要扩容 
{
	if(L.length>MAX)
	    return -1;
	else 
	    return 1;
}
Status kuorong(sqlist &L)//进行扩容 
{
	int *newbase=(int *)realloc(L.elem,(L.listsize+MAXM)*sizeof(sqlist));//扩容 
	    if(!newbase)
	        return -1;
	return 1;
}
Status listinsert(sqlist &L,int i,int e)//插入数据 
{
	if(i<1||i>L.length+1)
	    return -1;	
	for(int j=L.length-1;j>=i-1;j--)
	    L.elem[j+1]=L.elem[j];
	L.elem[i-1]=e;
	L.length++;
	return 1;
}

Status listdele(sqlist &L,int i,int &e)//删除数据 
{
	if(i<1||i>L.length)  return -1;
	int p=i-1;//要被删除的位置 
	e=p;//记录被删除的位置的值 
	int q=L.length-1;//表尾元素 
	//printf("%d# %d#\n",p,q);
	for(++p;p<=q;++p)
	    L.elem[p-1]=L.elem[p];
	    //*(p-1)=*p;
	--L.length;
	return 1;
}
Status listinprit(sqlist L)//输出数据 
{
	for(int i=0;i<L.length;i++)
	    printf("%d ",L.elem[i]);
	printf("\n");
	return 1;
}
Status listclear(sqlist &L)//清空表 
{
	L.length=0;
	return 1;
}
void MergeList()//合并表 
{
	int j=0;
	for(int i=0;i<lengtha;i++)
	    L3[i]=Lx[i];
	for(int i=lengtha;i<lengtha+lengthb;i++)
	    L3[i]=Ly[j++];
}
int main()
{
	int k,a,i;
	printf("请输入一个n值,代表你要构建的线性表的长度\n");
	while(scanf("%d",&n)!=EOF)
	{
		for(i=1;i<=2;i++)
		{			
			sqlist L1;
			if(initlist(L1)==-1)
			{
				printf("线性表构建失败,请重新输入n值\n");
				continue;
			}
			printf("请为L%d输入n个数据\n",i);
			listshuru(L1);
			printf("L%d排序后的结果\n",i);
			paixu(L1);
			listinprit(L1);
			printf("是否执行插入操作,是 请输入1,不是请输入2\n");
			scanf("%d",&a);
			if(a==1)
			{
				printf("请在插入操作前输入您想要插入的位置以及要插入的数\n");
				int vis=0;
				flag=false;
				while(!vis)
				{
					scanf("%d%d",&m,&x);
					if(listinsert(L1,m,x)==-1)
						printf("您的插入位置不合法,请在数据范围内输入,(注:1<=m<=n)\n");
					else
					    vis=1;
					if(vis==1)
					{
						if(panduanrong(L1)==-1)
						{
							printf("若需要扩容输入1,若不需要扩容输入2重新进行所有操作,请输入:\n");
							scanf("%d",&a);
							if(a==1)
							{
								if(kuorong(L1)==-1)
							    {
							    	printf("对不起,扩容失败,请重新进行所有操作\n");
							    	flag=true;
							    	break;
							    }
							    else
							        printf("恭喜您,扩容成功\n");
							}						
							else
							{
								flag=true;
								break;
							}
						}
					}
				}
			    if(flag) continue;
				printf("输出插入后的序列\n");
				listinprit(L1);
			}
		    printf("是否执行删除操作,是 请输入1,不是请输入2\n");
            scanf("%d",&a);
			if(a==1)
			{
				printf("再进行删除操作前,请您先输入要删除的位置\n");
				int b,visb=0;
				while(!visb)
				{
					scanf("%d",&b);
				    if(listdele(L1,b,k)==-1)
				    	printf("您的插入位置不合法,请在数据范围内输入,(注:1<=b<=n)\n");
					else
					    visb=1;
					if(visb==1)
					{
					    printf("输出删除元素后的序列\n");
						listinprit(L1);
					}
				}
			} 
			if(i==1)
			{
				for(int j=0;j<L1.length;j++)
			    	Lx[j]=L1.elem[j];
			    lengtha=L1.length;
			}
			else
			{
				for(int j=0;j<L1.length;j++)
			        Ly[j]=L1.elem[j];
			    lengthb=L1.length;
			}   
			listclear(L1);
	    }
	    printf("是否执行合并操作,是 请输入1,不是请输入2\n");
        scanf("%d",&a);
		if(a==1) 
		{
			MergeList();
			for(int j=0;j<lengtha+lengthb;j++)
			   printf("%d ",L3[j]);
			printf("\n");
		}
		printf("已经执行到第%d次,是否继续执行,是 请输入1,不是请输入2\n");
		scanf("%d",&a);
		if(a==2)
		    break;
	}
	return 0;
} 

  

河南理工大学14级数据结构第一次上机实验课题试验

标签:

原文地址:http://www.cnblogs.com/tonghao/p/4833723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!