静态数据表的实现

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

// 值类型
typedef int DataType;

typedef struct SeqList {
DataType data; // 值
int size; // 数量
} SeqList;

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

// 尾部插入
void SeqListPushBack(SeqList *pSL, DataType data);

// 头部插入
void SeqListPushFront(SeqList *pSL, DataType data);

// 尾部删除
void SeqListPopBack(SeqList *pSL);

// 头部删除
void SeqListPopFront(SeqList *pSL);

// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *pSL, int pos, DataType data);

// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *pSL, int pos);

// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);

// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *pSL, DataType data);

// 清空
void SeqListClear(SeqList *pSL);

// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);

// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *pSL);

// 返回数量
int SeqListSize(SeqList *pSL);

// 销毁

void SeqListDestroy(SeqList *pSL); 

#ifndef SCQLIST_H_
#define SCQLIST_H_
#endif
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

typedef int DataType;
#define MAX_SIZE	(100)

typedef struct SeqList {
	DataType array[MAX_SIZE];	// 存数据的空间
	int size;		// 1) 有效数据有多少个 2) 当前可用的数组下标
}	SeqList;

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

// 增删改查
// 增
// 尾插
void SeqListPushBack(SeqList *pSL, DataType data);
// 头插
void SeqListPushFront(SeqList *pSL, DataType data);
// 根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data);
// 删
// 尾删
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 SeqListUpdate(SeqList *pSL, int pos, DataType data);

// 查询
// 返回遇到的第一个下标,如果没有遇到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);
//从小到大排序
void SeqListSort(SeqList *pSL);
 
//初始化
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 > 0);
	int i;
	for (i = pSL->size; i> 0; i--)
	{
		pSL->array[i] = pSL->array[i-1];
	}
	pSL->array[0] = data;
	pSL->size++;
}
// 根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
	assert(pSL != NULL);
	assert(pSL->size > pos);
	int i;
	for (i = pSL->size; i> pos; i--)
	{
		pSL->array[i] = pSL->array[i - 1];
	}
	pSL->array[pos] = data;
	pSL->size++;
}
// 尾删
void SeqListPopBack(SeqList *pSL)
{
	assert(pSL != NULL);
	assert(pSL->size > 0);
	pSL->size--;
}
// 头删
void SeqListPopFront(SeqList *pSL)
{
	assert(pSL != NULL);
	int i = 0;
	for (i = 0; i < pSL->size-1; i++)
	{
		pSL->array[i] = pSL->array[i + 1];
	}
	pSL->size--;
}
// 根据下标删除
void SeqListErase(SeqList *pSL, int pos)
{
	assert(pSL!=NULL);
	assert(pSL->size>0);
	int i;
	for (i = pos; i < pSL->size - 1; i++)
	{
		pSL->array[i] = pSL->array[i + 1];
	}
	pSL->size--;

}
// 根据数据删除,只删除遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data)
{
	int ret = SeqListFind(pSL,data);
	if (ret == -1)
	{
		SeqListErase(pSL, ret);
	}
}

// 根据数据删除,删除所有遇到的
void SeqListRemoveAll(SeqList *pSL, DataType data)
{
	int i = 0;
	int ret=SeqListFind(pSL,data);
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == pSL->array[ret])
		{
			SeqListErase(pSL, i);
		}
	}
}

// 根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data)
{
	int i = pos;
	pSL->array[i] = data;
}

// 查询
// 返回遇到的第一个下标,如果没有遇到,返回 -1
int SeqListFind(SeqList *pSL, DataType data)
{
	int i = 0;
	for (i = 0; i < pSL->size; i++)
	{
		if (pSL->array[i] == data)
		{
			return i;
		}
	}
	return -1;
}

void SeqListSort(SeqList *pSL)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < pSL->size-1; i++)
	{
		for (j = 0; j < pSL->size - 1 - i; j++)
		{
			if ((pSL->array[j]>pSL->array[j + 1])>0)
			{
				pSL->array[j] ^= pSL->array[j + 1];
				pSL->array[j + 1] ^= pSL->array[j];
				pSL->array[j] ^= pSL->array[j + 1];
			}
		}
	}
}
void SeqListprint(SeqList *pSL)
{
	int i;
	for (i = 0; i < pSL->size; i++)
	{
		printf("%d  ", pSL->array[i]);
	}
	printf("\n");
}
void TestSeplist()
{
	SeqList s1;
	SeqListInit(&s1);
	SeqListDestroy(&s1);



	SeqListPushBack(&s1,1);
	SeqListPushBack(&s1,2);
	SeqListPushBack(&s1, 2);
	SeqListPushBack(&s1, 2);
	SeqListPushBack(&s1,3);

	SeqListPushFront(&s1,4);
	SeqListPushFront(&s1,5);
	SeqListPushFront(&s1,6);
	SeqListInsert(&s1, 0, 101);

	SeqListErase(&s1, 6);

	SeqListRemoveAll(&s1, 1);

	SeqListSort(&s1);
	SeqListprint(&s1);
}

通过mian.c函数调用实现

#include"scqlist.h"

int main()
{
	TestSeplist();
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/cdatreides/article/details/80713133
今日推荐