代码实现顺序表的操作函数

#pragma once

#include <assert.h>
#include <stdio.h>

typedef int DataType;
#define MAX_SIZE (100)

typedef struct SeqList{
	DataType array[MAX_SIZE];
	int size;
}SeqList;

//初始化
void SeqListInit(SeqList *pSL);

//销毁
void SeqListDestroy(SeqList *pSL);

//增、删、改、查

//增
//尾插
void SeqListPushBack(SeqList *pSL, DataType data);
//头插
void SeqListPushBack(SeqList *pSL, DataType data);
//根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data);

//删
//尾删
void SeqListPopBack(SeqList *pSL);
//头删
void SeqListPopFront(SeqList *pSL);
//根据下标删除
void SeqListErase(SeqList *pSL);
//根据数据删除,只删除遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);

//查询
//返回遇到的第一个下标,如果没有遇到,则返回-1
int SeqListFind(SeqList *pSL, DataType data);
//根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data);

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

//销毁
void SeqListDestroy(SeqList *pSL)
{
	assert(pSL != NULL);
	pSL->size = 0;
}

//尾插
void SeqListPushBack(SeqList *pSL, DataType data)
{
	assert(pSL != NULL);
	assert(pSL->size < MAX_SIZE);

	pSL->array[pSL->size] = data;
	pSL->size++;
}

//头插
void SeqListPushFront(SeqList *pSL, DataType data)
{
	assert(pSL != NULL);
	assert(pSL->size < MAX_SIZE);

	//1.以要搬移的数作为循环的指示
	int pos;
	for (pos = pSL->size - 1; pos>=0; pos--)
	{
		pSL->array[pos + 1] = pSL->array[pos];
	}
	pSL->array[0] = data;
	pSL->size++;
}

//根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
	assert(pSL != NULL);
	assert(pSL->size < MAX_SIZE);
	assert(pos >= 0 && pos <= pSL->size);
	int space;
	for (space = pSL->size; space>pos; space--)
	{
		pSL->array[space] = pSL->array[space - 1];
	}
	pSL->array[pos] = data;
	pSL->size++;
}

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

//头删
void SeqListPopFront(SeqList *pSL)
{
	assert(pSL != NULL);
	int pos;
	for (pos = 0; pos < pSL->size-1; pos++)
	{
		pSL->array[pos] = pSL->array[pos + 1]; 
	}
	pSL->size--;
}
//根据下标删除
void SeqListErase(SeqList *pSL, int pos)
{
	assert(pSL != NULL);
	assert(pos >= 0 && pos < pSL->size);
	int node;
	for (node = pos; node < pSL->size - 1; node++)
	{
		pSL->array[node] = pSL->array[node + 1];
	}
	pSL->size--;

}
//查询
int SeqListFind(SeqList *pSL, DataType data)
{
	assert(pSL != NULL);
	int i;
	for (i = 0; i < pSL->size - 1; i++)
	{
		if (pSL->array[i] == data)
		{
			return i;
		}
	}
	return -1;
}
//根据数据删除
void SeqListRemove(SeqList *pSL, DataType data)
{
	int pos = SeqListFind(pSL, data);
	if (pos != -1) {
		// 如果找到了
		SeqListErase(pSL, pos);
	}
}
//根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data)
{
	assert(pSL != NULL);
	assert(pos >= 0 && pos < pSL->size - 1);

	pSL->array[pos] = data;
}


//打印函数

void SeqListPrint(SeqList *pSL)
{
	int i;
	for (i = 0; i < pSL->size; i++) {
		printf("%d ", pSL->array[i]);
	}
	printf("\n");
}

void TestSeqList()
{
	SeqList sl;
	SeqListInit(&sl);

	SeqListPushBack(&sl, 1);
	SeqListPushBack(&sl, 2);
	SeqListPushBack(&sl, 3);  
	SeqListPushBack(&sl, 4);

	//SeqListPushFront(&sl, 0);
	//SeqListPushFront(&sl, -1);

	//SeqListInsert(&sl,2,2);

	//SeqListPopBack(&sl);

	//SeqListPopFront(&sl);
	//SeqListPopFront(&sl);

	//SeqListErase(&sl, 4);

	//SeqListRemove(&sl, 2);

	SeqListUpdate(&sl,1,6);

	SeqListPrint(&sl);

}

用typedef int DataType;  对int 进行重命名。

定义一个结构体,结构体中参数为,一个DataType型的数组,一个DataType型的size,

数组中存放数据,size表示数组的长度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值