day 3 数据结构 基础练习

test.c

#include "head.h"
//顺序表在堆区申请空间,成功返回堆区的首地址,否则返回NULL
Seqlist *CreateSpce()
{
	Seqlist *s=(Seqlist *)malloc(sizeof(Seqlist));
	if(s==NULL)
		return NULL;
	s->len=0;//表示顺序表数据元素的个数为0,顺序表空
	return s;
}
//判断顺序表满成立返回-1  失败返回0
void SeqlistFull(Seqlist *s)
{
	if(s->len==MAXSIZE)
		return -1;
	return 0;
}
//在表尾插入
void InsertByRear(Seqlist *s,datatype e)
{
	if(SeqlistFull(s))//判断是否为满
		return;
	s->data[s->len++]=e;//e存储到表尾,顺序表长度自增
}
//遍历顺序表
void SeqlistOutput(Seqlist *s)
{
	for(int i;i<s->len;i++)
	{
		printf("%d\t",s->data[i]);
	}
}
//判断顺序为空
//空返回-1  非空返回0
int SeqlistEmpty(Seqlist *s)
{
	if(s->len==0)
		return -1;
	return 0;
}
//顺序表删除表尾元素
void SeqlistDeleteByRear(Seqlist *s)
{
	if(SeqlistEmpty(s))
	{
		return -1;
	}
	s->len--;
}
//查找成功输出查找的数据元素,失败结束
void SeqlistSearch(Seqlist *s,int sub)
{
	//1.判断数据表是否为空
	//2.判断下表是否合法
	if(SeqlistEmpty(s)||sub<0||sub>=s->len)
	{
		printf("查找失败!!\n");
		return;
	}
	//3.直接输出下标对应的值
	printf("查找到的元素是:%d\n",s->data[sub]);
}
//按下标修改
//无返函数
void SeqlistUpdate(Seqlist *s,int sub1,int e1)
{
{
	//1.判断数据表是否为空
	//2.判断下表是否合法
	if(SeqlistEmpty(s)||sub<0||sub>=s->len)
	{
		printf("修改失败!!\n");
		return;
	}
	s->data[sub1]=e1;
	SeqlistOutput(s);
}
//按下标插入
//无返函数
void SeqlistInsertBySub(Seqlist *s,int sub,int e)
{
	//1.判断数据表是否为空
	//2.判断下表是否合法
	if(SeqlistEmpty(s)||sub<0||sub>=s->len)
	{
		printf("插入失败!!\n");
		return;
	}
    //3.循环后移
	for(int i=s->len-1;i>=sub;i--)
	{
		s->data[i+1]=s->data[i];
	}
	//在sub插入
	s->data[sub]=e;
	s->len++;
	SeqlistOutput(s);
}
//按下标删除
void SeqlistDeleteBySub(Seqlist *s,int sub)
{
	if(SeqlistEmpty(s)||sub<0||sub>=s->len)
	{
		printf("删除失败!!!\n");
		return;
	}
	for(int i=sub;i<s->len-1;i++)
	{
		s->data[i]=s->data[i+1];
	}
	s->len--;
	SeqlistOutput(s);
}
//按元素查找
//返回下标
int SeqlistSearchBydata(Seqlist *s,int key)
{
	if(SeqlistEmpty(s))
		return -1;
	for(int i=0;i<s->len;i++)
	{
		if(s->data[i]==key)
			return i;
	}
	return -1;
}
//按元素修改
void seqlistUpdateBydata(Seqlist *s,int key,datatype e)
{
	int sub=SeqlistSearchBydata(s,key);
	if(sub==-1)
	{
		printf("要修改的元素不存在!");
		return;
	}
	else
		s->data[sub]=e;
	SeqlistOutput(s);
}
//按元素删除
void SeqlistDeleteBydata(Seqlist *s,int key)
{
	int sub=SeqlistSearchBydata(s,key);
	if(sub==-1)
		printf("修改失败!!!");
	for(int i=sub;i<s->len-1;i++)
	{
		s-data[i]=s->data[i+1];
	}
	s->len--;
	SeqlistOutput(s);
}
//顺序表去重
void SearchDeleteBysub1(Seqlist *s,int sub)
{
	if(SeqlistEmpty(s)||sub<0||sub>=s->len)
	{
		return;
	}
	for(int i=sub;i<s->len-1++)
	{
		s->data[i]=s->data[i+1];

	}
	s-len--;
}
void SeqlistDeteleRep(Seqlist *s)
{
	for(int i=0;i<s->len;i++)
	{
		for(int j=i+1;j<s->len;j++)
		{
			if(s->data[i]==s->data[j])
			{
				SeqlistDeleteBysub1(s,j);
				printf("\n");
				s->len--;
				j--;
			}
		}
	}
	SeqlistOutput(s);
}
//顺序标排序
void SeqlistBubble(Seqlist *s)
{
	int i,j;
	datatype temp;
	for(i=1;i<s->len;i++)
	{
		int count==0;
		for(j=0;i<s-len-i;j++)
		{
			if(s->data[j]>s->data[j+1])
			{
				temp=s->data[j];
				s->data[j]=s->data[j+1];
				s->data[j+1]=temp;
				count++;

			}
		}
		if(count==0)
			break;
	}
	SeqlistOutput(s);
}
//顺序表合并
void SeqlistCombin(Seqlist *s1,Seqlist *s2,Seqlist *s3)
{
	int i=0;
	int j=0;
	while(i<s1->len&&j<s2->len&&s3->len<MAXSIZE)
	{
		if(s1->data[i]<=s2->data[j])
			s3->data[s3->len++]=s1->data[i++];
		else
			s3->data[s3->len++]=s2->data[j++];
	}
	//存储剩余s1的元素
	while(i<s1->len&&s3->len<MAXSIZE)
	{
		s3->data[s3->len++]=s1->data[i++];
	}
	//存储剩余s2 的元素
	while(j<s2->len&&s3->len<MAXSIZE)
	{
		s3->data[s3->len++]=s3->data[j++];
	}
	SeqlistOutput(s);
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	//顺序表创建
	Seqlist *s=CreateSpce();
	if(s=NULL)
		return 0;
	//==========顺序表在表位插入================
	int n;
	datatype e;
	printf("输入插入元素的个数:");
	scanf("%d",&n);
	if(n>MAXSIZE)//判断数据的个数是否大于线性表的长度,大于则结束函数
		return 0;
	for(int i;i<n;i++)
	{
		scanf("%d",&e);
		InsertByRear(s,e);//循环在表尾插入元素
	}
	//==========顺序表遍历======================
	SeqlistOutput(s);
    //==========顺序表删除表尾=================
	SeqlistDeleteByRear(s);
	printf("删除表尾元素\n");
	SeqlistOutput(s);
	//==========顺序表按下标查找===============
	int sub;
	printf("输入查找的下标:");
	scanf("%d",&sub);
	SeqlistSearch(s,sub);
	//==========顺序表按下标修改==============
	int sub1;
	printf("输入要修改的下标:");
	scanf("%d",&sun1);
	int e1;
	printf("输入修改为:");
	scanf("%d",&e1);
	SeqlistUpdate(s,sub1,e1);
	//==========顺序表按下标插入==============
	int sub2;
	printf("输入要插入的下标:");
	scanf("%d",&sub2);
	int e3;
	printf("输入要插入的值:");
	scanf("%d",&e2);
	SeqlisInsertBySub(s,sub2,e2);
	//==========顺序表按下标删除==============
	int sub3;
	printf("输入删除的下标:");
	scanf("%d"&sub3);
	SeqlistDeleteBySub(s,sub3);
	//==========顺序表按元素查找===============
	int key;
	printf("输入要查找的元素:");
	scanf("%d",&key);
	int sub01=SeqlistSearchBydata(s,key);
	if(sub01==-1)
		printf("查找失败!!!!\n");
	else
    	printf("查找到元素的下标为%d\n",sub01);
	//==========顺序表按元素修改==============
	int key1;
	printf("输入要修改的元素:");
	scanf("%d",&key1);
	datatype e01;
	printf("输入修改为:");
    scanf("%d",&e01);
	SeqlistUpdateBydata(s,key1,e01);
	//==========顺序表按元素删除===============
	int key2;
	printf("输入要删除的元素");
	scanf("%d",&key2);
	SeqlistDeleteBydata(s,key2);
	//==========顺序表去重========================
	SeqlistDeleteRep(s);
	//==========顺序表排序=====================
	seqlistBubbble(s);
	//==========顺序表合并=====================
	Seqlist s2={11,22,44,55};
	Seqlist s3;
	s3.len=0;
	SeqlistCombin(s,&s2,&s3)
	
	return 0;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXSIZE 20
typedef int datatype;
typedef struct
{
	//数据元素
	datatype data[MAXSIZE];
	//顺序表长度
	int len;

}Seqlist;
void InsertByRear(Seqlist *s,datatype e)
void SeqlistFull(Seqlist *s)
void SeqlistOutput(Seqlist *s)
int SeqlistEmpty(Seqlist *s)
void SeqlistDeleteByRear(Seqlist *s)
void SeqlistSearch(Seqlist *s,int sub)
void SeqlistInsertBySub(Seqlist *s,int sub,int e)
void SeqlistUpdate(Seqlist *s,int sub1,int e1)
void SeqlistDeleteBySub(Seqlist *s,int sub)
int SeqlistSearchBydata(Seqlist *s,int key)
void SeqlistUpdateBydata(Seqlist *s,int key,datatype e);
void SeqlistDeleteBydata(Seqlist *s,int key)
void SearchDeleteBysub1(Seqlist *s,int sub)
void SeqlistDeteleRep(Seqlist *s)
void SeqlistBulle(Seqlist *s);
void SeqlistCombin(Seqlist *s1,Seqlist *s2,Seqlist *s3)y

#endif
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kei歪歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值