2023/3/29 作业

该代码示例展示了如何在C语言中创建一个顺序表,包括输入元素、输出元素、按值或下标删除元素以及对顺序表进行排序的功能。程序首先创建一个固定大小的顺序表,然后用户可以输入元素,按照给定的值或下标删除元素,并对表进行升序排序。
摘要由CSDN通过智能技术生成

作业:

1> 顺序表按元素删除

思路:参数【顺序表 删除的值key】

1.根据删除的元素得到下标

2.根据下标实现【按下标删除】

2>顺序表排序【类似数组排序】

比较:if( list->data[j] > list->data[j+1])

3> 复习今天的学习内容

#ifndef __HEAD__
#define __HEAD__

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 7
typedef int datatype;
typedef struct
{
	datatype data[MAXSIZE];
	int len;

}seqlist;


seqlist *create();

int full_len(seqlist *list);
int input(seqlist *list, datatype val);
void output(seqlist *list);
int search_sub(seqlist *list, datatype val);
int delete_sub(seqlist *list, int sub);
int delete_val(seqlist *list, datatype val);
void sort(seqlist *list);
#endif
#include "head.h"

int main(int argc, const char *argv[])
{
	int n;
	printf("请输入元素个数:");
	scanf("%d", &n);
	seqlist *list = create();
	printf("%p\n", list);
	datatype val;
	//输入元素
	for(int i=0; i<n; i++)
	{
		printf("请输入元素:");
		scanf("%d", &val);
		input(list, val);

	}
	output(list);
	//删除元素
	printf("请输入要删除的元素:");
	scanf("%d", &val);
	delete_val(list, val);
	output(list);
	//根据下标删除
	int sub;
	printf("请输入要删除的下标:");
	scanf("%d", &sub);
	delete_sub(list, sub);
	output(list);
	//顺序表排序
	sort(list);
	return 0;
}
//函数文件
#include "head.h"
/*
 * function:    申请线性表结构内存
 * @param [ in] 
 * @param [out] 
 * @return      线性表地址
 */
seqlist *create()
{
	seqlist *list=(seqlist *)malloc(sizeof(seqlist));
	if(list == NULL)
	{
		return NULL;
	}
	list->len=0;
	return list;
}
/*
 * function:    判断线性表元素是否已满
 * @param [ in] 
 * @param [out] 
 * @return   是-1 否0   
 */
int full_len(seqlist *list)
{
	return list->len==MAXSIZE?-1:0;
}
/*
 * function:    输入元素
 * @param [ in] 线性表 元素
 * @param [out] 
 * @return      
 */
int input(seqlist *list, datatype val)
{
	if(full_len(list))
	{
		printf("元素已满,无法添加\n");
		return -1;
	}
	list->data[list->len] = val;
	list->len++;
	return 0;
}
/*
 * function:    输出元素
 * @param [ in] 线性表
 * @param [out] 
 * @return      
 */
void output(seqlist *list)
{
	printf("输出元素:");
	for(int i=0; i<list->len; i++)
	{
		printf("%d\t", list->data[i]);
	}
	printf("\n");
}
/*
 * function:    根据元素查找对应下标
 * @param [ in] 线性表
 * @param [out] 
 * @return      返回下标
 */
int search_sub(seqlist *list, datatype val)
{
	for(int i=0; i<list->len; i++)
	{
		if(list->data[i] == val)
		{
			return i;
		}
	}
	return -1;
}
/*
 * function:    根据下标删除
 * @param [ in] 线性表 下标
 * @param [out] 
 * @return      成功0失败-1
 */
int delete_sub(seqlist *list, int sub)
{
	if(full_len(list) || sub<0 || sub>=list->len)
	{
		printf("删除失败\n");
		return -1;
	}
	for(int i=sub+1; i<list->len; i++)
	{
		list->data[i-1] = list->data[i];
	}
	list->len--;
	return 0;
}
/*
 * function:    根据原素删除
 * @param [ in] 线性表 元素
 * @param [out] 
 * @return      返回删除的元素下标
 */
int delete_val(seqlist *list, datatype val)
{
	int sub = search_sub(list, val);
	if(sub==-1)
	{
		printf("没有此元素:%d\n", val);
		return -1;
	}
	delete_sub(list, sub);
	printf("%d\n", sub);
	return 0;
}
/*
 * function:    排序
 * @param [ in] 线性表
 * @param [out] 
 * @return      
 */
void sort(seqlist *list)
{
	datatype t;
	for(int i=1; i<list->len; i++)
	{
		int count=0;
		for(int j=0; j<list->len-i; j++)
		{
			if(list->data[j] > list->data[j+1])
			{
				t = list->data[j];
				list->data[j] = list->data[j+1];
				list->data[j+1] = t;
				count++;
			}
		}
		if(count == 0)
		{
			break;
		}
	}
	for(int i=0; i<list->len; i++)
	{
		printf("%d\t", list->data[i]);
	}
	printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值