数据结构第#1次上机练习题

#include <stdio.h>
#define MAXSIZE 10 //线性表的最大长度 
#define OK 1
#define ERROR 0

typedef int ElemType;//顺序表中存放整形元素 
typedef struct
{
	ElemType elem[MAXSIZE];
	int last;
}SeqList;

/*查找操作(按内容查找)*/
int Locate(SeqList L,ElemType e)
{
	int i=0;//i为计数器 
	while((i<=L.last)&&L.elem[i]!=e)
	 i++;
	if(i<L.last)
	 return(i+1);//若找到,返回其序号
	else
	 return(-1);//若没找到,返回-1 
} 

/*查找操作(按序号查找)*/
int GetData(SeqList L,int num)
{
	if(num<=L.last)
	 return(L.elem[num-1]);
}
 
/*插入操作:在第i个数据元素之前插入一个元素e*/
int  InsList(SeqList *L,int i,ElemType e)
{
	/*判断插入位置是否合法*/
	if((i<1)||(i>L->last+2))
	{
		printf("插入位置不合法");
		return(ERROR);
	}
	/*判断表是否已满*/ 
	if(L->last>=MAXSIZE-1)
	{
		printf("表已满,无法插入");
		return(ERROR);
	}
	int k;
	for(k=L->last;k>=i-i;k--)
	    L->elem[k+1]=L->elem[k];
	L->elem[i-1]=e;
	L->last++;
	return(OK); 
}

/*删除操作:删除第i个数据元素*/
int DelList(SeqList *L,int i,ElemType *e)
{
	/*判断删除位置是否合法*/
	if((i<1)||(i>L->last+1))
	{
		printf("删除位置不合法");
		return(ERROR);
	}
	*e=L->elem[i-1];
	int k;
	for(k=i;k<L->last;k++)
	{
		L->elem[k-1]=L->elem[k]; 
	}
	L->last--;
	return(OK); 
}

int main(void)
{
	SeqList L={{5,5,3,2,1,6}};
	L.last=5; 
	ElemType e;
	int i;
	printf("查找操作:查找第3个数据元素,结果为:%d\n",GetData(L,3));
	printf("查找操作:查找数据元素为4的元素,结果为:%d\n",Locate(L,4)); 
	printf("查找操作:查找数据元素为7的元素,结果为:%d\n",Locate(L,7));
	printf("\n插入操作:在第3个位置前插入元素8,插入后的顺序表为:");
	InsList(&L,3,8);
	for(i=0;i<L.last;i++)
	 printf("%d ",L.elem[i]);
	printf("\n删除操作:删除第5个元素,删除后的顺序表为;");
	DelList(&L,5,&e); 
	for(i=0;i<L.last;i++)
	 printf("%d ",L.elem[i]);
}
#include <stdio.h>
#define MAXSIZE 10 //线性表的最大长度 
#define OK 1
#define ERROR 0

typedef int ElemType;//顺序表中存放整形元素 
typedef struct
{
	ElemType elem[MAXSIZE];
	int last;
}SeqList;

/*查找操作(按内容查找)*/
int Locate(SeqList L,ElemType e)
{
	int i=0;//i为计数器 
	while((i<=L.last)&&L.elem[i]!=e)
	 i++;
	if(i<L.last)
	 return(i+1);//若找到,返回其序号
	else
	 return(-1);//若没找到,返回-1 
} 

/*查找操作(按序号查找)*/
int GetData(SeqList L,int num)
{
	if(num<=L.last)
	 return(L.elem[num-1]);
}
 
/*插入操作:在第i个数据元素之前插入一个元素e*/
int  InsList(SeqList *L,int i,ElemType e)
{
	/*判断插入位置是否合法*/
	if((i<1)||(i>L->last))
	{
		printf("插入位置不合法");
		return(ERROR);
	}
	/*判断表是否已满*/ 
	if(L->last>=MAXSIZE-1)
	{
		printf("表已满,无法插入");
		return(ERROR);
	}
	int k;
	for(k=L->last;k>=i-1;k--)
	    L->elem[k+1]=L->elem[k];
	L->elem[i-1]=e;
	L->last++;
	return(OK); 
}

/*删除操作:删除第i个数据元素*/
int DelList(SeqList *L,int i,ElemType *e)
{
	/*判断删除位置是否合法*/
	if((i<1)||(i>L->last))
	{
		printf("删除位置不合法");
		return(ERROR);
	}
	*e=L->elem[i-1];
	int k;
	for(k=i;k<L->last;k++)
	{
		L->elem[k-1]=L->elem[k]; 
	}
	L->last--;
	return(OK); 
}

int main(void)
{
	SeqList L={{5,6,3,2,1,6}};
	L.last=6; 
	ElemType e;
	int i;
	//在屏幕上打印原表
	printf("原表为:"); 
	for(i=0;i<L.last;i++)
	{
		printf("%d ",L.elem[i]);
	} 
	putchar('\n');
	//测试删除操作 
	printf("查找操作:查找第3个数据元素,结果为:%d\n",GetData(L,3));
	printf("查找操作:查找数据元素为4的元素,结果为:%d\n",Locate(L,4)); 
	printf("查找操作:查找数据元素为7的元素,结果为:%d\n",Locate(L,7));
	printf("查找操作:查找数据元素为2的元素,结果为:%d\n",Locate(L,2));
	//测试插入操作 
	printf("\n插入操作:在第3个位置前插入元素8,插入后的顺序表为:");
	InsList(&L,3,8);
	for(i=0;i<L.last;i++)
	 printf("%d ",L.elem[i]);
	printf("\n插入操作:在第8个位置前插入元素8,插入后的顺序表为:");
	InsList(&L,8,8);
	//测试删除操作 
	printf("\n删除操作:删除第5个元素,删除后的顺序表为:"); 
	DelList(&L,5,&e); 
	for(i=0;i<L.last;i++)
	 printf("%d ",L.elem[i]);
	printf("\n删除操作:删除第0个元素,删除后的顺序表为:");
	DelList(&L,0,&e);
	printf("\n删除操作:删除第13个元素,删除后的顺序表为:");
	DelList(&L,13,&e); 
	
	//自主操作测试
	int input,index;
	char ch;
	putchar('\n');
	puts("现在的表为:");
    for(i=0;i<L.last;i++)
     printf("%d ",L.elem[i]);
	puts("\n请输入您想要操作的元素序号:"); 
	scanf("%d",&input);
	printf("请选择操作:\n");
	printf("*****************************************\n");
	printf("A)查找  B)插入  C)删除\n"); 
	printf("*****************************************\n");
	getchar();
	scanf("%c",&ch);
	switch(ch)
	{
		case 'A':printf("查找操作:查找第%d个数据元素,结果为:%d\n",input,Locate(L,input));break;
		case 'B':printf("请输入插入的元素值:");scanf("%d",&index);InsList(&L,input,index);break;
		case 'C':DelList(&L,input,&e);break;
		
	}
    puts("处理后的表为:");
    for(i=0;i<L.last;i++)
     printf("%d ",L.elem[i]);
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值