数据结构_顺序表操作

#define MAX_SIZE 1000
#include <stdio.h>
#include <assert.h>

typedef int DataType;

typedef struct SeqList
{
	DataType array[MAX_SIZE];
	int size;//1.下标  2.顺序表中的元素个数
}SeqList;

void SeqPrint(SeqList *pSL);//打印顺序表
void SeqListinit(SeqList *pSL);//初始化
void SeqListPushBack(SeqList *pSL, DataType data);//尾部插入
void SeqListPushFront(SeqList *pSL, DataType data);//头插
void SeqListInsert(SeqList *pSL, int pos, DataType data);//指定处插入,此处pos是逻辑顺序
void SeqListPopBack(SeqList *pSL);//尾删
void SeqListPopFront(SeqList *pSL);//头删
void SeqListErase(SeqList *pSL, int pos);//按下标删除
void SeqListRemove(SeqList *pSL, DataType data);//删除第一个遇到的值
void SeqListRemoveAll(SeqList *pSL, DataType data);//删除所有值
void SeqListClear(SeqList *pSL);
int SeqListFind(SeqList *pSL, DataType data);//返回下标
int SeqListEmpty(SeqList *pSL);//是否为空表
int SeqListSize(SeqList *pSL);//返回表的大小
void SeqListSort(SeqList *pSL);//选择排序
#include "SeqList.h"

void SeqPrint(SeqList *pSL)//打印顺序表
{
	int i = 0;
	for (i; i < pSL->size; i++)
	{
		printf("%d, ", pSL->array[i]);
	}
	printf("\n");
}

void SeqListinit(SeqList *pSL)//初始化
{
	assert(pSL);
	pSL->size = 0;
}

void SeqListPushBack(SeqList *pSL, DataType data)//尾部直接插入
{
	assert(pSL);
	if (pSL->size == MAX_SIZE)
	{
		printf("表满");
		return;
	}
	else
	{
		pSL->array[pSL->size++] = data;
	}
}

void SeqListPushFront(SeqList *pSL, DataType data)//头插,数据元素要向后移动
{
	int i;
	assert(pSL);
	if (pSL->size == MAX_SIZE)
	{
		printf("list full");
		return;
	}
	else
	{
		pSL->size++;
		/*for (i = 0; i < pSL->size; i++)
		{
		pSL->array[pSL->size-i] = pSL->array[pSL->size-i-1];
		}
		pSL->array[pSL->size-i] = data;*/
		for (i = pSL->size; i > 0; i--)
		{
			pSL->array[i] = pSL->array[i - 1];
		}
		pSL->array[0] = data;
	}
}

void SeqListInsert(SeqList *pSL, int pos, DataType data)//指定处插入,此处pos是逻辑顺序
{
	int i;
	assert(pSL);
	assert(pos >= 0 && pos <= pSL->size);
	if (pSL->size == MAX_SIZE)
	{
		printf("list full");
		return;
	}
	else
	{
		pSL->size++;
		for (i = 0; i < pSL->size - pos + 1; i++)
		{
			pSL->array[pSL->size - i] = pSL->array[pSL->size - i - 1];
		}
		pSL->array[pSL->size - i] = data;
		/*for (i = pSL->size; i >= pos ; i--)
		{
		pSL->array[i] = pSL->array[i-1];
		}
		pSL->array[pos - 1] = data;*/
	}
}

void SeqListPopBack(SeqList *pSL)//尾删
{
	assert(pSL);
	pSL->size--;
}

void SeqListPopFront(SeqList *pSL)//头删
{
	int i;
	assert(pSL);
	pSL->size--;
	for (i = 0; i < pSL->size; i++)
	{
		pSL->array[i] = pSL->array[i + 1];
	}

}

void SeqListErase(SeqList *pSL, int pos)//按下标删除
{
	int i;
	assert(pSL);
	assert(pos >= 0 && pos <= pSL->size);
	pSL->size--;
	for (i = 0; i < pSL->size - pos; i++)
	{
		pSL->array[pos + i] = pSL->array[pos + i + 1];
	}
}

void SeqListRemove(SeqList *pSL, DataType data)//删除第一个遇到的值
{
	int i, tmp;
	assert(pSL);
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
		{
			tmp = i;
			break;
		}
	}
	pSL->size--;
	for (i = 0; i < pSL->size - tmp; i++)
	{
		pSL->array[tmp + i] = pSL->array[tmp + i + 1];
	}
}

void SeqListRemoveAll(SeqList *pSL, DataType data)//删除所有值
{
	int i, j;
	int count = 0;
	assert(pSL);
	for (i = 0, j = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
		{
			continue;
		}
		else
		{
			pSL->array[j] = pSL->array[i];
			count++;
			j++;
		}
	}
	pSL->size = count;
}


int SeqListFind(SeqList *pSL, DataType data)//返回第一个指定数据元素的下标
{
	int i;
	assert(pSL);
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
			return i;
	}
}

int SeqListEmpty(SeqList *pSL)//是否为空表
{
	assert(pSL);
	if (pSL->size == 0)
		return 1;
	else
		return 0;
}

int SeqListSize(SeqList *pSL)//返回表的大小
{
	assert(pSL);
	return pSL->size;
}

void swap(DataType *p, DataType *pp)
{
	DataType tmp = *p;
	*p = *pp;
	*pp = tmp;
}

void SeqListSort(SeqList *pSL)//选择排序
{
	int mindex, maxdex;
	int start, end;
	int i;
	assert(pSL);
	for (start = 0, end = pSL->size - 1; start <= end; start++, end--)
	{
		mindex = start;
		maxdex = start;
		for (i = start; i <= end; i++)
		{
			if (pSL->array[i] < pSL->array[mindex])
				mindex = i;
			else if (pSL->array[i] > pSL->array[maxdex])
				maxdex = i;
		}
		swap(pSL->array + start, pSL->array + mindex);
		if (maxdex == start)
			maxdex = mindex;
		swap(pSL->array + end, pSL->array + maxdex);
	}
}



Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值