线性表之顺序表

线性表的顺序储存是指用一组地址连续的存储单元依次存储线性表中的各个数据元素,使得线性表中在逻辑结构上相邻的元素在连续的物理存储单元中,即通过数据元素物理存储的连续性来反映 数据元素之间逻辑上的相邻关系。 顺序表就是采用顺序储存结构存放的线性表。

头文件

#pragma once
#define   MAX_SIZE    10
typedef int DataType;
typedef struct SeqList
{
	DataType array[MAX_SIZE];
	int size;    
} *PSeqList;

 //typedef struct SeqList SeqList;

void InitSeqList(PSeqList seq);
void PushBack(PSeqList pSepList, DataType data);//尾插
void PopBack(PSeqList pSeqList);//尾删
void PushFront(PSeqList pSepList, DataType data);//头插
void PopFront(PSeqList pSeqList);//头删
void Insert(PSeqList pSeqList, int pos, DataType data);//任意位置插入
void Erase(PSeqList pSeqList, int pos);//删除任意位置
int Find(PSeqList pSeqList, DataType data);//查找
void Remove(PSeqList PseqList, DataType data);//删除
void RemoveAll(PSeqList pSeqList, DataType data);
int Empty(PSeqList pSeqList);//清空
void PrintSeqList(PSeqList pSeqList);//打印


函数部分

#include"head.h"
#include<malloc.h>
#include<stdio.h>
void InitSeqList(PSeqList seq)//初始化线性表
{
	seq= (DataType *)malloc(MAX_SIZE * sizeof(DataType)); //分配空间
	seq->size = 0;
}
void PushBack(PSeqList pSepList, DataType data)//尾插
{
	assert(pSepList);
	if (pSepList->size >= MAX_SIZE)
	{
		perror("out of memory");
		exit(1);
	}
	pSepList->array[pSepList->size++] = data;
	pSepList->size++;
}


void PopBack(PSeqList pSepList)//尾删
{
	assert(pSepList);
	if (pSepList->size < 0)
	{
		perror("无元素可删");
		exit(1);
	}
		pSepList->size--;
}
void PushFront(PSeqList pSepList, DataType data)//头插
{
	assert(pSepList);
	int i = 0;
	if(pSepList->size >= MAX_SIZE)
	{
		perror("out of memory");
		exit(1);
	}
	for (i = pSepList->size;i <= 0;i--)
	{
		pSepList->array[i + 1] = pSepList->array[i];
	}
	pSepList->array[0] = data;
	pSepList->size++;
}
void PopFront(PSeqList pSepList)//头删
{
	assert(pSepList);
	int i = 0;
	if (pSepList->size < 0)
	{
		perror("无元素可删");
			exit(1);
	}
	for (i = pSepList->size-1;i > 0;i--)
	{
		pSepList->array[i-1] = pSepList->array[i];
	}
	pSepList->size--;
}
void Insert(PSeqList pSeqList, int pos, DataType data)//任意位置插入
{
	assert(pSeqList);
	int i = 0;
	if (i >= MAX_SIZE && pos < 0)
	{
		perror("溢出");
		exit(1);
	}
	if (i < 1 || i > pSeqList->size + 1)
	{
		perror("插入位置不合法");
		exit(1);
	}
	for (i = pSeqList->size;i >= pos;i--)
	{
		pSeqList->array[i-1] = pSeqList->array[i];
	}
	pSeqList->array[pos-1] = data;
	pSeqList->size++;
}
void Erase(PSeqList pSeqList, int pos)//删除任意位置
{
	assert(pSeqList);
	int i = 0;
	if (i <1 || i > pSeqList->size+1)
	{
		perror("删除位置不合法");
		exit(1);
	}
	for (i = pSeqList->size-1;i > pos;i--)
	{
		pSeqList->array[i - 1] = pSeqList->array[i];
	}
	pSeqList->size--;
}
int Find(PSeqList pSeqList, DataType data)//查找
{
	assert(pSeqList);
	int i = 0;
	for (i < pSeqList->size;i > 0;i--)
	{
		if (pSeqList->array[i] == data)
			return i;
		else
			return -1;
	}
}
void Remove(PSeqList PseqList, DataType data)//删除
{
	assert(PseqList);
	int pos;
	pos = Find(PseqList, data);
	if (pos != -1)
		Erase(PseqList, pos);
}
void RemoveAll(PSeqList pSeqList, DataType data)
{
	assert(pSeqList);
	int count = 0;
	int i = 0;
	for (i = 0;i < pSeqList->size;i++)
	{
		if (pSeqList->array[i] == data)
			count++;
		else
			pSeqList->array[i - count] = pSeqList->array[i];
	}
	pSeqList->size -= count;
}
int Empty(PSeqList pSeqList)//清空
{
	assert(pSeqList);
	while(pSeqList->size!=0)
	pSeqList->size--;
}
void PrintSeqList(PSeqList pSeqList)//打印
{
	int i = 0;
	assert(pSeqList);
	for (i = 0;i < pSeqList->size;i++)
	{
		printf("%d", pSeqList->array[i]);
	}
	printf("\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值