顺序表实现查找去重

seqlist.h分文件:

#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAX 20
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int data[MAX];                                                                                            
    int len;
}seqlist,*seq;

//创建
seq seqlist_create();
//插入
int seq_insert(seq P,int in_data);
//打印输出
int print_seq(seq P);
//判空
int seq_empty(seq P);
//判满
int seq_full(seq P);
//按位置插入
int insert_pos(seq P,int in_data,int pos);
//按位置删除
int del_pos(seq P,int pos);
//按值查找,返回对应位置的下标
int search_data(seq P,int in_data);
//按值删除元素
int del_data(seq P,int in_data);
//按位置修改
int updata_pos(seq P,int pos,int in_data);
//冒泡排序
int sort_seq(seq P);
//去重
int del_repetition(seq P);
//选择排序
int choose_seq(seq P);
//释放顺序表
int free_seq(seq *P);
#endif

seqlist.c:

#include "seqlist.h"
seq seqlist_create()
{
	seq P=(seq)malloc(sizeof(seqlist));
	if(P==NULL){
		printf("申请失败\n");
		return NULL;
	}else{
		printf("申请成功\n");
		P->len=0;
		return P;
	}
}
int seq_insert(seq P,int in_data)
{
	if(P==NULL)
		return -1;
	if(P->len>=MAX){
		printf("空间不足\n");
		return -2;
	}P->data[P->len]=in_data;
	P->len++;
	return 0;
}
int print_seq(seq P)
{
	if(P==NULL)
		return -1;
	for(int i=0;i<P->len;i++)
		printf("%d\n",P->data[i]);
	return 0;
}
int seq_full(seq P)
{
	if(P==NULL)
		return -1;
	if(P->len==MAX)
		printf("空间内所储存元素已满\n");
	return 0;
}
int seq_empty(seq P)
{
	if(P==NULL)
		return -1;
	if(P->len==0)
		printf("储存元素为0,请输入\n");
	return 0;
}
int insert_pos(seq P,int in_data,int pos)
{
	if(P==NULL)
		return -1;
	for(int i=P->len;i>=pos-1;i--)
		P->data[i]=P->data[i-1];
	P->data[pos-1]=in_data;
	P->len++;
	return 0;
}
int del_pos(seq P,int pos)
{
	if(P==NULL)
		return -1;
	for(int i=pos-1;i<P->len;i++)
		P->data[i]=P->data[i+1];
	P->len--;
	return 0;
}
int search_data(seq P,int in_data)
{
	if(P==NULL)
		return -1;
	int count=0;
	for(int i=0;i<P->len;i++)
		if(P->data[i]==in_data){
			count++;
			printf("第%d个下标为%d\n",count,in_data);
		}
}
int del_data(seq P,int in_data)
{
	int flag=1;
	if(P==NULL)
		return -1;
	for(int i=0,j;i<P->len;i++)
		if(P->data[i]==in_data){
			for(j=i;j<P->len;j++)
				P->data[j]=P->data[j+1];
			P->len--;
			flag=0;
		}
	if(flag)
		printf("未找到该值\n");
	return 0;
}
int updata_pos(seq P,int pos,int in_data)
{
	if(P==NULL)
		return -1;
	if(pos>P->len||pos<=0){
		printf("输入位置有误\n");
		return -2;
	}else
		P->data[pos-1]=in_data;
	return 0;
}
int sort_seq(seq P)
{
	if(P==NULL)
		return -1;
	int temp;
	for(int i=1,j;i<P->len;i++)
		for(j=0;j<P->len-i;j++)
			if(P->data[j]>P->data[j+1]){
				temp=P->data[j];
				P->data[j]=P->data[j+1];
				P->data[j+1]=temp;
		}return 0;
}
int del_repetition(seq P)
{
	for(int i=0,j;i<P->len-1;i++)
		for(j=i+1;j<P->len;j++)
			if(P->data[i]==P->data[j]){
				for(int k=j;k<P->len-1;k++)
					P->data[k]=P->data[k+1];
				P->len--;
			}return 0;
}
int choose_seq(seq P)
{
	int temp;
	for(int i=0,j;i<P->len-1;i++)
		for(j=i+1;j<P->len;j++)
			if(P->data[i]<P->data[j]){
				temp=P->data[i];
				P->data[i]=P->data[j];
				P->data[j]=temp;
			}return 0;
}
int free_seq(seq *P)
{
	if(*P==NULL||P==NULL)
		return -1;
	free(*P);
	*P=NULL;
	return 0;
}

主程序main.c:

#include <stdio.h>
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	seq P=seqlist_create();
	seq_empty(P);
	seq_full(P);
	seq_insert(P,23);//输入值
	seq_insert(P,38);
	seq_insert(P,21);
	seq_insert(P,32);
	seq_insert(P,54);
	seq_insert(P,21);
	seq_insert(P,33);
	seq_insert(P,3);
	print_seq(P);//打印值
	printf("**************\n");
	insert_pos(P,44,5);//按位置插入
	print_seq(P);
	printf("**************\n");
	del_pos(P,2);
	print_seq(P);
	printf("**************\n");
	search_data(P,21);
	del_data(P,54);
	print_seq(P);
	printf("**************\n");
	updata_pos(P,2,33);
	print_seq(P);
	printf("**************\n");
	sort_seq(P);//冒泡排序,升序
	print_seq(P);
	printf("**************\n");
	del_repetition(P);//去重
	print_seq(P);
	printf("**************\n");
	choose_seq(P);//选择排序,降序
	print_seq(P);
	printf("**************\n");
	free_seq(&P);
	print_seq(P);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值