数据结构day2

head.h

#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
#include <string.h>
enum type
{
	FALUSE=-1,
	SUCCESS
};

#define MAX 9//数组大小
typedef int datatype; //重新定义数组类型


typedef struct sqlist//顺序表结构体
{
	datatype data[MAX];
	int len;
}*sqlist;
//sqlist是struct Sqlist*的别名

//申明函数
sqlist creat_sqlist();
int output();
int insert_rear();
int delete_rear();
int search_index();
int index_change();
int index_insert();
int index_delete();
int key_delete();
int key_search();
int key_change();
int rm_re();
int maopao();
#endif

main.c

#include "head.h"
int main(int argc, const char *argv[])
{  //创建顺序表 
	sqlist list=creat_sqlist();
	//顺序表尾部插入	
	datatype element;
	for(int i=0;i<MAX;i++)
	{
		printf("please enter element:");
		scanf("%d",&element);
		insert_rear(list,element);
			
	}
	//打印输出
	output(list);

	//尾部删除
	delete_rear(list);
	delete_rear(list);
	delete_rear(list);
	printf("\ndelete have done\n");
	output(list);

	//查找
	int index;
	printf("请输入查找编号:\n");
	scanf("%d",&index);
	search_index(index,list);

	//修改	
	int index1,element1;
	printf("请输入修改编号:\n");
	scanf("%d",&index1);
	printf("请输入修改后的值:\n");
	scanf("%d",&element1);

	index_change(index1,list,element1);
	output(list);

	//根据下标插入
	int index2,element2;
	printf("请输入插入编号:\n");
	scanf("%d",&index2);
	printf("请输入插入后的值:\n");
	scanf("%d",&element2);
	
	index_insert(index2,list,element2);
	output(list);

	//根据下标删除
	int index3,element3;
	printf("请输入删除编号:\n");
	scanf("%d",&index3);
	index_delete(index3,list);
	output(list);

	//按元素删除
	datatype key1;
	printf("请输入删除元素:\n");
	scanf("%d",&key1);
	key_delete(key1,list);
	output(list);

	//按元素查找
	datatype key2;
	int ret;
	printf("请输入查找元素:\n");
	scanf("%d",&key2);
	ret=key_search(key2,list);
	printf("\n%d\n",ret);

	//按元素修改
	datatype key3,element4;
	printf("请输入修改元素:\n");
	scanf("%d",&key3);
	printf("请输入修改之后的元素:\n");
	scanf("%d",&element4);

	key_change(key3,list,element4);
	output(list);

	//去重
	rm_re(list);
	output(list);

	//冒泡排序
	maopao(list);
	output(list);


	return 0;
}

 test.c(去重函数和排序函数尚未完善)

#include <stdio.h>
#include <stdlib.h>
#include "head.h"

//顺序表创建函数
sqlist creat_sqlist()
{
	//申请堆区内存
	sqlist list=(sqlist)malloc(sizeof(struct sqlist));
	if(NULL==list)
	{
		return NULL;

	}
	//对元素清零
	bzero(list->data,sizeof(list->data));
	list->len=0;
	//返回顺序表
	return list;
}


//尾部插入函数
int insert_rear(sqlist list,datatype element)
{
	//判断是否为空或NULL
	if(NULL==list || list->len==MAX)
	{
		printf("sqlist full...\n");
		return FALUSE;
	}
	//正常时插入数据
	list->data[list->len]=element;
	list->len++;
	
}


//输出函数
int output(sqlist list)
{
	//判断是否为空或NULL
	if(NULL==list||list->len==0)
	{
		printf("sqlist empty..\n");
		return FALUSE;

	}
	
	//循环输出
	for(int i=0;i<list->len;i++)
	{
		printf("%d ",list->data[i]);
	}
	putchar(10);
	return SUCCESS;
}


//尾部删除函数
int delete_rear(sqlist list)
{
	//判断是否为空或NULL
	if(NULL==list||list->len==0)
	{
		printf("sqlist empty...\n");
		return FALUSE;
	}

	//删除,len--即可
	list->len--;
	return SUCCESS;
}


//下标查询函数
int search_index(int index,sqlist list)
{
	//判断是否为空或NULL或非法
	if(NULL==list||list->len==0||index<0||index>=list->len)
	{
		printf("error\\n");
		return FALUSE;
	}
	//index查找
	printf("%d\n",list->data[index]);
	return SUCCESS;

}


//下标修改函数
int index_change(int index,sqlist list,int element)
{
	//判断是否为空为NULL或非法
	if(NULL==list||list->len==0||index<0||index>=list->len)
	{
		printf("error\n");
		return FALUSE;
	}
	//覆盖修改
	list->data[index]=element;
	return SUCCESS;
}

//下标插入函数
int index_insert(int index,sqlist list,int element)
{
	if(NULL==list||list->len==MAX||index<0||index>list->len)
	{
		printf("error\n");
		return FALUSE;
	}
	for(int i=list->len-1;i>=index;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[index]=element;
	list->len++;

	return SUCCESS;
}

//下标删除函数
int index_delete(int index,sqlist list)
{
	if(NULL==list||list->len==0||index<0||index>=list->len)
	{
		printf("error\n");
		return FALUSE;
	}
	for(int i=index+1;i<=list->len-1;i++)
	{
		list->data[i-1]=list->data[i];
	}
	list->len--;
	return SUCCESS;
}

//按元素进行删除
int key_delete(datatype key,sqlist list)
{
	int flag;
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==key)
		{   //找到下标,调用下标删除函数
			flag=index_delete(i,list);
		}
	}
	return flag;
}

//按元素查询(下标)
int key_search(datatype key,sqlist list)
{
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==key)
		{  
			return i;
		}


	}
	return FALUSE;
}

int key_change(datatype key,sqlist list,datatype element)
{
	int flag;
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==key)
		{  
			//找到下标,调用下标修改函数
			flag=index_change(i,list,element);	

		}

	}
	
	return flag;
}
//去重函数
int rm_re(sqlist list)
{
	//判断是否为空为NULL或非法
	if(NULL==list||list->len==0)
	{
		printf("error\n");
		return FALUSE;
	}


	int i,j;
	for(i=0;i<list->len;i++)
	{
		for(j=i+1;j<list->len;j++)
		{	if(list->data[j]=list->data[i])
			{
				index_delete(j,list);
			
				j--;
			}
		}
	}
	return SUCCESS;
}
int maopao(sqlist list)
{
	
	//判断是否为空为NULL或非法
	if(NULL==list||list->len==0)
	{
		printf("error\n");
		return FALUSE;
	}


	int i,j;
	for(i=1;i<list->len;i++)
	{
		for(j=0;j<list->len-i;j++)
		{
			datatype temp;
			if(list->data[j]>list->data[j+1])
			{   temp=list->data[j];
				list->data[j]=list->data[j+1];
				list->data[j+1]=temp;
			}

		}
	}
	return SUCCESS;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值