顺序表详解

来源:互联网 发布:app one是什么软件 编辑:程序博客网 时间:2024/06/05 14:53
定长顺序表定义:
#pragma once
#define SIZE 10
typedef struct SeqList
{
 int elem[SIZE];  //顺序表表示数组,总大小SIZE
 int length;  //有效数据的个数
}SeqList,*PSeqList;

//初始化  长度置0即可
void InitSeqList(PSeqList ps);

//插入:在pos位置上插入元素val(从pos开始,后面的数据都后移一位,pos位置值置成val,长度加1)
bool InsertSeqList(PSeqList ps,int pos,int val);

//查找:遍历ps,在ps上查找key,返回其下标,没找到返回-1(顺序表是用数组实现的,数组内没有为-1的下标)
int SearchSeqList(PSeqList ps,int key);

//删除:遍历ps,删除值为key的结点,长度减一,找到返回true,没找到返回false
bool DeleteVal(PSeqList ps,int key);

//删除:删除ps中下标为pos的结点,长度减一,如果下标不合法,返回false
bool DeletePos(PSeqList ps,int pos);

//返回有效数据个数length
int GetLength(PSeqList ps);

//判空,判断有效数据个数是否为0
bool IsEmpty(PSeqList ps);

//调Destory()
void Clear(PSeqList ps);

//销毁,有效数据个数置0
void Destory(PSeqList ps);

//输出函数,遍历顺序表,一个一个打印
void Show(PSeqList ps);

//返回下标为pos的值,下标不合法,返回false,用rtval带出要得到的值
bool GetElem(PSeqList ps,int pos,int *rtval);

//有序顺序表中插入val,顺序表人有序
//(在ps中找第一个比val大的结点,这就是val要插入的位置,从该点起,后面数据都后移一位,长度加1)
void Insert(PSeqList ps,int val);

//顺序表比较(跟字符串比较相似),先判断有空顺序表的情况,在判断都不为空的情况
int CompareSeqList(PSeqList ps1,PSeqList ps2);

//逆置,(跟字符串逆置相似)
//顺序表表头结点值与顺序表表尾结点值进行交换,然后第二个节点值与倒数第二个结点值交换,依次
void Rev(PSeqList ps);

//删除ps1中ps2ps3都有的元素
//先找到ps2和ps3共有的元素,遍历ps1,若有,删掉
void Dele(PSeqList ps1,PSeqList ps2,PSeqList ps3);

//合并ps1,ps2(将ps2中数据一个一个插入ps1)
void Bing(PSeqList ps1,PSeqList ps2);


****************************************************************************************
不定长顺序表定义:
typedef struct DSeqList
{
 int *elem;//指向动态数组的首地址
 int length;//有效数据长度
 int listsize;//总长度
}DSeqList,*PDSeqList;

与定常顺序表的区别在于,当顺序表满了会自动二倍的扩容