线性表的顺序储存是指用一组地址连续的存储单元依次存储线性表中的各个数据元素,使得线性表中在逻辑结构上相邻的元素在连续的物理存储单元中,即通过数据元素物理存储的连续性来反映 数据元素之间逻辑上的相邻关系。 顺序表就是采用顺序储存结构存放的线性表。
头文件
#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");
}