数据结构实验1_顺序表的操作


第一次数据结构实验,做的不好..............

顺序表,其实就是一个一维数组,只是要加上动态分配空间的操作..............


/*
	实验要求:
	写出
	Status initlist(sqlist &L)
	Status listinsert( sqlist &L,  int i,  int e )
	Status listindele( sqlist &L,  int i,  int &e )
	Status listinprint( sqlist L)
	void MergeList(sqlist La, sqlist Lb, sqlist &Lc)
	等几个函数,实验手工创建两个非递减序列存放于La和
	 Lb中,并调用MergeList实现数据的合并。
	关于程序健壮性的内容:
	1、对于插入与删除位置若不合法请给出适当提醒
	2、若输入的数据不是非递减排列可通过自己写的sort()函数排序后再进行后续操作
*/
#include
#include
const int size=100,add=20;//初始大小和增加大小 
struct sqlist
{
	int *base;//存储空间首地址 
	int lenth;//长度 
	int maxlenth;//容量 
};
void init_list(sqlist &list)//创建和初始化顺序表 
{
	list.base=new int[size];
	list.lenth=0;
	list.maxlenth=size;
	printf("创建顺序表完成!请继续操作!\n");
	return;
}
void list_insert(sqlist &list,int i,int x)//在第 i 个位置插入元素 x  
{
	if(i>0&&i<=list.lenth)//长度合法
	{
		int temp=list.lenth,k;
		if(list.lenth==list.maxlenth)// 否则就拓展 
		{
			printf("空间不足,是否拓展内存?\n 1:是 2:否\n");
			int key;
			scanf("%d",&key);
			if(key==1)
			{
				int *newbase=(int *)realloc(list.base,(list.maxlenth+add)*sizeof(int));
				if(!newbase)
				{
					printf("计算机内存不足,空间分配失败!请重新操作!\n"); 
					return;
				}
				list.base=newbase;
				list.maxlenth+=add;
			}
			else
			{
				printf("操作已取消,请重新操作!\n"); 
				return;
			}
		}
		for(k=temp;k>=i;--k)
		{
			list.base[k]=list.base[k-1];
		}
		list.base[i-1]=x;
		++list.lenth;
		printf("操作完成,请继续操作!\n");
	}
	else
	{
		printf("操作请求失败,请重新操作!\n");
	}
}
void list_delete(sqlist &list,int i,int &x)//删除第 i 个元素,保存在 x 中 
{
	if(i>0&&i=temp)&&(i*pb)//大的排在后面 
		{
			*pc++=*pb++;
		}
		else//相同的只保留一个 
		{
			*pc++=*pa++;
			*pb++;
		}
		++lc.lenth; 
	}
	while(pa=0&&n<=ok+1)
			{
				list_insert(list[n],i,x);
			} 
			else
			{
				printf("操作错误,请重新输入!\n");
			}
			printf("请输入指令:1 返回主程序\n");
			scanf("%d",&key);
			if(key==1)
			{
				system("cls"); 
			}
		}
		else if(kase&&come==3)//删除 
		{
			int n,i,x;
			printf("请输入需要操作的对象(表 n(0<=n<=%d)),删除位置:\n",ok+1);
			scanf("%d%d",&n,&i);
			if(n>=0&&n<=ok+1)
			{
				list_delete(list[n],i,x);
			} 
			else
			{
				printf("操作错误,请重新输入!\n");
			}
			
			printf("请输入指令:1 返回主程序\n");
			scanf("%d",&key);
			if(key==1)
			{
				system("cls"); 
			}
		}
		else if(kase&&come==4)//输出 
		{
			int n;
			printf("请输入需要操作的对象(表 n(0<=n<=%d))\n",ok+1);
			scanf("%d",&n);
			if(n>=0&&n<=ok+1)
			{
				list_print(list[n]);
			} 
			else
			{
				printf("操作错误,请重新输入!\n");
			}
			printf("请输入指令:1 返回主程序\n");
			scanf("%d",&key);
			if(key==1)
			{
				system("cls");  
			}
		}
		else if(kase&&come==5)//合并 
		{
			sort(list[1].base,0,list[1].lenth);//对表排序 
			sort(list[2].base,0,list[2].lenth);
			merge_list(list[1],list[2],list[0]);//合并 
			ok=1;//改变对象的个数 
			printf("请输入指令:1 返回主程序\n");
			scanf("%d",&key);
			if(key==1)
			{
				system("cls");  
			}
		}
		else
		{
			printf("操作错误,请重新输入!\n");
			printf("请输入指令:1 返回主程序\n");
			scanf("%d",&key);
			if(key==1)
			{
				system("cls");  
			}
		}
	}
	return 0;
}


博客断更一星期了,惭愧............


你可能感兴趣的:(====数据结构====)