定长顺序表

来源:互联网 发布:易建联nba生涯数据 编辑:程序博客网 时间:2024/05/18 06:56

       一个线性表是n个数据元素的有限序列,分为顺序表和链表。顺序表指用一组地址连续的存储单元依次存储线性表的数据元素,即逻辑相邻,物理也相邻;链表指用一组任意的存储单元存储线性表的数据元素,即逻辑相邻物理不相邻。

       线性结构的特点是:在数据元素的非空有限集中,

  1. 存在唯一的一个被称做“第一个”的数据元素;
  2. 存在唯一的一个被称做“最后一个”的数据元素;
  3. 除第一个之外,集合中的每个数据元素均只有一个前驱;
  4. 除最后一个之外,集合中的每个数据元素均只有一个后继;

       顺序表又分为定长顺序表和不定长顺序表,今天先看一下定长顺序表。

       首先看一下定长顺序表的定义:

typedef SIZE 10typedef struct SeqList{int elem[SIZE];int length;}SeqList,*PSeqList;
上述定义中,elem数组用来存放数据,length表示该顺序表中有效数据的个数。如下图所示:


接下来就初始化顺序表,并实现插入、删除等操作。

//SeqList.h#pragma once // 预防头文件重复引用#define SIZE 10typedef struct SeqList{int elem[SIZE];//存放数据int length;//有效数字个数}SeqList,*PSeqList;void InitSeqList(PSeqList ps);//初始化bool Insert(PSeqList ps,int pos,int val);//在pos位置插入valbool DeletePos(PSeqList ps,int pos);//删除pos位置int Search(PSeqList ps,int key);//查找关键字keybool DeleteVal(PSeqList ps,int key);//删除关键字keyvoid Clear(PSeqList ps);//清除顺序表数据bool IsEmpty(PSeqList ps);//判断是否为空int GetLength(PSeqList ps);//得到顺序表的有效长度void Destroy(PSeqList ps);//摧毁顺序表void Show(PSeqList ps);//打印顺序表
//SeqList.cpp#include "seqlist.h"#include <stdio.h>#include <assert.h>void InitSeqList(PSeqList ps){assert(ps != NULL);if(ps == NULL){return ;}ps->length = 0;}
static bool IsFull(PSeqList ps){return ps->length == SIZE;}bool Insert(PSeqList ps,int pos,int val){assert(ps != NULL);if(pos<0 || pos>ps->length || IsFull(ps)){return false;}for(int i=ps->length-1;i>=pos;i--){ps->elem[i+1] = ps->elem[i];}ps->elem[pos]  = val; ps->length++;return true;}
bool DeletePos(PSeqList ps,int pos){assert(ps != NULL);if(pos < 0 || pos > ps->length){return false;}for(int i=pos;i<ps->length;i++){ps->elem[i] = ps->elem[i+1];}ps->length--;return true;}
int Search(PSeqList ps,int key){for(int i=0;i<ps->length;i++){if(key == ps->elem[i]){return i;}}return -1;}
bool DeleteVal(PSeqList ps,int key){assert(ps != NULL);for(int i=0; ps->elem[i] != key;++i){if(i == ps->length-1){return false;}}for(int i=0;i<ps->length;++i){if(ps->elem[i] == key){for(int j=i;j<ps->length;j++){ps->elem[j] = ps->elem[j+1];}ps->length--;i--;}}return true;}
void Clear(PSeqList ps){ps->length = 0;}
bool IsEmpty(PSeqList ps){return ps->length == 0;}
int GetLength(PSeqList ps){return ps->length;}

void Destroy(PSeqList ps){Clear(ps);}
void Show(PSeqList ps){for(int i=0;i<ps->length;i++){printf("%d ",ps->elem[i]);}printf("\n");}
















原创粉丝点击