顺序表的基本操作

一、实验目的:

1、掌握线性表的逻辑结构

2、掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算

3、加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力

 

实验场地及仪器、设备和材料:devc++

 

实验训练内容(包括实验原理和操作步骤):(1)初始化顺序表L

(2)从键盘上依次输入任意个整数以创建顺序表L

(3)输出顺序表中的各元素

(4)输出顺序表L的长度

(5)输出顺序表L的第3个元素

(6)查找元素10,如果存在输出其位序,不存在输出0

(7)在顺序表的第5个位置插入数据元素25

(8)删除顺序表中的第3个数据元素

(9)查找顺序表中的最大值和最小值并输出

(10)实现顺序表的就地逆置

(11)清空顺序表L

(12)销毁顺序表L

根据要求自己写出对应的代码来实现

二、实验总结与评价

实验总结(包括实验数据分析、实验代码、实验结果、实验过程中出现的问题及解决方法等):

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MAXSIZE 100 
typedef int ElemType;
typedef int status;
typedef struct SqList
{  ElemType *elem;//存储空间的基地址 
      int length;//当前长度 
}SqList;//顺序表结构为Sqlist 
status InitList(SqList&L) //(1)顺序表的初始化 
 { L.elem=new ElemType[MAXSIZE];  //为顺序表分配一个大小为MAXSIZEde数组空间       
   if (!L.elem) 
   exit(OVERFLOW);//存储分配失败推出 
   L.length=0;//空表程度为0 
   return OK;
}
status CreateSqList (SqList &L, int n )// (2)从键盘上依次输入;顺序表的创建
{
   int i;
   L.length=n;
   printf("输入整型元素:  ");
   for (i=0; i<n; i++)  
       scanf("%d", &L.elem[i]);
   return OK;
}
status DisplaySqList (SqList L)//(3)输出顺序表的各元素 
{
   int i;
   for (i=0; i<L.length; i++)  
	   printf("%d  ", L.elem[i]);
   return OK;  
}
status ListLength(SqList L)//(4)输出顺序表的长度
{
	return(L.length);
}
bool GetElem(SqList L,int i)//(5)输出顺序表L的第3个元素
{
	if(i<1||i>L.length)
	return false;
	printf("顺序表的第三个元素是%d\n",L.elem[i-1]);
    for (i=0; i<L.length; i++)  
	   printf("%d  ", L.elem[i]);
	return true;
}
status LocateElem(SqList L,int e)//(6)查找元素10 
{
	int i=0;
	while(i<L.length&&L.elem[i]!=e)
	i++;
	if(i<L.length)
	{
	return i+1;
	}//若不存在输出0 
	else
	{
		return 0;
	}//存在则输出其位序 
}
bool ListInsert(SqList &L,int i,int e)//(7)在第5个位置插入数据元素25 
{
	int j;
	if(i<1||i>L.length+1||L.length==MAXSIZE)
	return false;
	i--;
	for(j=L.length;j>i;j--)
	L.elem[j]=L.elem[j-1];
	L.elem[i]=e;
	L.length++;
	for (i=0; i<L.length; i++)  
	   printf("%d  ", L.elem[i]);
	return true;
}
bool ListDelete(SqList&L,int i)//(8)删除表中的第3个元素 
{
	int j;
	if(i<i||i>L.length)
	return false;
	i--;
	for(j=i;j<L.length-1;j++)
	L.elem[j]=L.elem[j+1];
	L.length--;
	for (i=0; i<L.length; i++)  
	   printf("%d  ", L.elem[i]);
	return true;
}void Comparesize(SqList L)//(9)查找表中的最大值和最小值输出 
{
	int i,max,min;
	max=L.elem[0];
	min=L.elem[0];
	for(i=1;i<L.length;i++)
	{
		if(L.elem[i]>max)
		max=L.elem[i];
		if(L.elem[i]<min)
		min=L.elem[i];
	}
	printf("max:%d,min:%d",max,min);
}
void Localinversion(SqList L)//(10)实现顺序表的就地逆置 
{
	int i,j,temp;
	for(i=0,j=L.length-1;i<=j;i++,j--)
	{
		temp=L.elem[j];
		L.elem[j]=L.elem[i];
		L.elem[i]=temp;
	}
}
void ClearList(SqList &L)//(11)清空顺序表L 
{
	L.length=0;
}
void DestroyList(SqList &L)//(12)销毁顺序表 
{
	L.elem=NULL;
	L.length=0;
}
int Menu(void)
{
	int i;
	printf("请选择你要的功能\n");
	printf("1.初始化顺序表L\n"); 
	printf("2.从键盘上依次输入任意个整数以创建顺序表L\n");
	printf("3.输出顺序表中的各元素\n");
	printf("4.输出顺序表L的长度\n");
	printf("5.输出顺序表L的第3个元素\n");
	printf("6.查找元素10,如果存在输出其位序,不存在输出0\n");
	printf("7.在顺序表的第5个位置插入数据元素25\n");
	printf("8.删除顺序表中的第3个数据元素\n");
	printf("9.查找顺序表中的最大值和最小值并输出\n");
	printf("10.实现顺序表的就地逆置\n");
	printf("11.清空顺序表L\n");
	printf("12.销毁顺序表L\n");
	scanf("%d",&i);
	return i;
}
int main()
{
	int ch;
	SqList sq;
	while(1){
		ch=Menu();
		switch(ch)
		{
			case 1:
				InitList(sq);
				break;
			case 2:
				int i;
				printf("请输入要输入的元素个数\n");
				scanf("%d",&i);
				CreateSqList(sq,i);
			break;
			case 3:
				DisplaySqList(sq);
				printf("\n");
				break;
			case 4:
				printf("\n输出的顺序表L长度为%d\n",ListLength(sq));
			break;
			case 5:
				GetElem(sq,3);
			break;
			case 6:
				printf("元素10的位置%d\n",LocateElem (sq));
			break;
			case 7:
				printf("在顺序表的第5个位置插入数据元素25\n");
				ListInsert(sq,5,25);
				break;
			case 8:
				printf("删除L的第三个元素\n");
				ListDelete(sq,3);
				break;
			case 9:
				Comparesize(sq);
				printf("\n");
			break;
			case 10:
				printf("就地逆置后为:");
				Localinversion(sq);
				break;
			case 11:
				ClearList(sq);
				break;
			case 12:
				DestroyList(sq);
				break;
		}
	}
	return 0;
}

实验结果:

对实验的自我评价:

在实验过程中,感觉要弄清楚什么时候要用线性表L的地址什么时候要用线性表L的指针。编译完后发现还是会有一些经常犯的小错误,比如说SqList,ListLengh这种,总是会不小心写出Sqlist,Listleng;还有“;”号也是经常漏,下次要多多注意。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值