C语言实现静态顺序表的功能(增,删,查,改,以及排序)

首先在头文件中声明要实现的功能;
标头.h

#ifndef game_h
#define game_h
#define MAX_SIZE 10 
typedef unsigned int size_t;
typedef int DataType;

typedef struct SeqList
{
	DataType _array[MAX_SIZE];
	int _size; // 顺序表中有效元素的个数 
}SeqList, *PSeqList;
// 初始化顺序表 
void SeqListInit(PSeqList ps);

//尾插
void SeqListPushBack(PSeqList ps, DataType data);


void SeqListPopBack(PSeqList ps);

// 头插 
void SeqListPushFront(PSeqList ps, DataType data);

// 头删 
void SeqListPopFront(PSeqList ps);

// 任意位置中插入值为data的元素 
void SeqListInsert(PSeqList ps, size_t pos, DataType data);

// 删除任意位置中的元素 
void SeqListErase(PSeqList ps, size_t pos);

// 在顺序表中查找值为data的元素,返回该元素在顺序表中的下标 
int SeqListFind(PSeqList ps, DataType data);

// 删除顺序表中值为data的元素 
void SeqListRemove(PSeqList ps, DataType data);

// 删除顺序表中所有值为data的元素 
void SeqListRemoveAll(PSeqList ps, DataType data);

// 判断顺序表是否为空 
int SeqListEmpty(PSeqList ps);

// 获取顺序表中元素的个数 
int SeqListSize(PSeqList ps);

/ 
// 辅助操作 
// 打印顺序表中的元素 
void PrintSeqList(PSeqList ps);

// 用冒泡排序对顺序表中的元素进行排序 
void BubbleSort(PSeqList ps);

// 用选择排序对顺序表中的元素进行排序 
void SelectSort(PSeqList ps);

// 选择排序优化---一次找出最大最小元素所在的位置 
void SelectSort_OP(int* array, int size);
# endif

其次来实现它:

#define _CRT_SECURE_NO_WARNINGS 
#include "标头.h"
void SeqListInit(PSeqList ps){// 初始化顺序表 

	ps->_size = 0;
}
void SeqListPushBack(PSeqList ps, DataType data){// 尾插 
	ps->_size += 1;
	ps->_array[ps->_size - 1] = data;
}
void SeqListPopBack(PSeqList ps){// 尾删 
	ps->_size -= 1;
}
void SeqListPushFront(PSeqList ps, DataType data){// 头插 

	ps->_size += 1;
	for (int i = ps->_size-1; i >0; i--)
	{
		ps->_array[i] = ps->_array[i-1];
	}
	ps->_array[0] = data;

}
void SeqListPopFront(PSeqList ps){//头删
	for (int i = 0; i <ps->_size - 1; i++)
	{
		ps->_array[i] = ps->_array[i+1];
	}
	ps->_size -= 1;
}
// 在顺序表中查找值为data的元素,返回该元素在顺序表中的下标 
int SeqListFind(PSeqList ps, DataType data){
	for (int i = 0; i < ps->_size; i++){
		if (ps->_array[i] == data){
			return i;
		}
	}
	return -1;
}
// 删除顺序表中值为data的元素 
void SeqListRemove(PSeqList ps, DataType data){
	int ret = SeqListFind(ps, data);
	for (int i = ret; i< ps->_size - 1; i++)
	{
		ps->_array[i] = ps->_array[i + 1];
	}
	ps->_size -= 1;
}
// 任意位置中插入值为data的元素 
void SeqListInsert(PSeqList ps, size_t pos, DataType data){
	for (int i = ps->_size - 1; i >= pos; i--)
	{
		ps->_array[i + 1] = ps->_array[i];
	}
	ps->_array[pos] = data;
	ps->_size += 1;
}
// 删除任意位置中的元素 
void SeqListErase(PSeqList ps, size_t pos){
	for (int i = pos; i < ps->_size-1; i++)
	{
		ps->_array[i] = ps->_array[i + 1];
	}
	ps->_size -= 1;
}
// 删除顺序表中所有值为data的元素 
void SeqListRemoveAll(PSeqList ps, DataType data){
	int count = 0;
	for (int i = 0; i < ps->_size;i++){
		if (ps->_array[i] == data)
		{
			count++;
		}
		else{
			ps->_array[i - count] = ps->_array[i];
		}
		
	}
	ps->_size -= count;
}
// 判断顺序表是否为空 
int SeqListEmpty(PSeqList ps){
	if (ps->_size == 0)
		return 1;
	else
		return 0;
}
// 获取顺序表中元素的个数 
int SeqListSize(PSeqList ps){
	return ps->_size;
}
// 打印顺序表中的元素
void PrintSeqList(PSeqList ps){
	for (int i = 0; i < ps->_size ; i++){
		printf("%d ", ps->_array[i]);
	}
}
// 用冒泡排序对顺序表中的元素进行排序 
void BubbleSort(PSeqList ps){
	for (int i = 0; i < ps->_size - 1; i++){
		int flag = 0;
		for (int j = 0; j < ps->_size - 1 - i; j++){
			if (ps->_array[j] < ps->_array[j + 1])
			{
				int temp = ps->_array[j];
				ps->_array[j] = ps->_array[j + 1];
				ps->_array[j + 1] = temp;
				flag = 1;
			}
		}
		if (flag == 0)
			break;
	}
}
// 用选择排序对顺序表中的元素进行排序 
void SelectSort(PSeqList ps){
	int max = 0;
	for (int i = 0; i < ps->_size - 1-i; i++){
		for (int j = 1; j < ps->_size - i; j++){
			if (ps->_array[max] < ps->_array[j])
			{
				max = j;

			}
		}
		if (max != ps->_size - 1 - i)
		{
			int temp = ps->_array[max];
			ps->_array[max] = ps->_array[ps->_size - 1 - i];
			ps->_array[ps->_size - 1 - i] = temp;
		}
	}
}
测试文件:
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include "标头.h"
int main()
{
	SeqList s;
	s._size = 6;
	for (int i = 0; i <s._size; i++)
	{
		s._array[i] = s._size-i;

	}
	//SeqListInit(&s);//初始化
	//SeqListPushBack(&s, 6);//尾插
	//SeqListPopBack(&s);//尾删
	//SeqListPushFront(&s, 99);//头插
	//SeqListPopFront(&s);//头删
	//int ret = SeqListFind(&s, 1);//查找值为data的元素
	//printf("%d\n", ret);
	//SeqListRemove(&s, 1);//删除值为data的元素
	//eqListInsert(&s, 2, 99);//在任意位置插入值为data的元素
	//SeqListErase(&s, 2);//删除任意位置的元素
	//SeqListRemoveAll(&s, 3);// 删除顺序表中所有值为data的元素 
	/*int ret=SeqListEmpty(&s);
	if (1 == ret)
	{
		printf("顺序表为空");
	}
	else if(ret==0){
		printf("顺序表不为空");
	}*/
	// 获取顺序表中元素的个数 
	//int ret=SeqListSize(&s);
	//PrintSeqList(&s);// 打印顺序表中的元素
//	BubbleSort(&s);// 用冒泡排序对顺序表中的元素进行排序 
	SelectSort(&s);// 用选择排序对顺序表中的元素进行排序 
 	getchar();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值