c语言顺序表的实现与基本操作

来源:互联网 发布:淘宝投放手机详情 编辑:程序博客网 时间:2024/05/22 13:15

顺序表

定义:如图所示顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
              
顺序表的特性:
1.长度固定;
2.存储空间是连续的;
3.要在顺序表中插入或删除一个元素的时候会牵动其后的所有元素,所以时间复杂度是O(n)

结构体实现

#defineMAX_SIZE 10typedef int DataType;typedef struct Seqlist{DataType array[MAX_SIZE];int size;}Seqlist, *pSeqlist;

函数功能实现

void InitSeqlist(pSeqlist Seq){//初始化assert(Seq);memset(Seq->array,0,MAX_SIZE*sizeof(DataType));Seq->size = 0;}void PopBack(pSeqlist Seq){//尾部删除assert(Seq);if (Empty(Seq)){printf("顺序表为空");}Seq->size--;}void PushBack(pSeqlist Seq,DataType data){//尾部插入assert(Seq && data);if (Seq->size >= MAX_SIZE){printf("顺序表已满");return 0;}Seq->size++;Seq->array[Seq->size] = data;}


void PopFront(pSeqlist Seq){//头部删除int i = 0;assert(Seq);if (Empty(Seq)){printf("顺序表为空");}for (i = 0; i > Seq->size; i++){Seq->array[i] = Seq->array[i+1];}Seq->size--;}void PushFront(pSeqlist Seq,DataType data){//头部插入int i = 0;assert(Seq && data);if (Seq->size >= MAX_SIZE){printf("顺序表已满");return 0;}for (i = 0; i < Seq->size; i++){Seq->array[i + 1] = Seq->array[i];}Seq->array[0] = data;}
void Insert(pSeqlist Seq, int pos,DataType data){//指定位置插入int i = 0;assert(Seq && pos < Seq->size);if (Seq->size >= MAX_SIZE){printf("顺序表已满");return 0;}if (pos > Seq->size){printf("插入位置不合法");return 0;} for (i = Seq->size; i > pos; i--)Seq->array[i + 1] = Seq->array[i];Seq->array[i] = data;Seq->size++;}void Erase(pSeqlist Seq, int pos){//指定位置删除int i = 0;assert(Seq && pos);if (Empty(Seq)){printf("顺序表为空");}if (pos > Seq->size){printf("删除位置不合法");}for (i = pos; i < Seq->size; i++){Seq->array[pos - 1] = Seq->array[pos];}Seq->size--;}
void Remove(pSeqlist Seq, DataType data){//删除指定元素int i = 0;assert(Seq && data);if (Empty(Seq)){printf("顺序表空");}while (Seq->array[i] != data){i++;}Erase(Seq, i);}void RemoveAll(pSeqlist Seq,DataType data){//删除指定元素所有相同元素int count = 0;int i = 0;assert(Seq);if (Empty(Seq)){printf("顺序表为空");}for (i = 0; i < Seq->size; i++){while (Seq->array[i] == data){count++;}Seq->array[i] = Seq->array[i + count];}Seq->size = Seq->size - count;}
int Empty(pSeqlist Seq) {//判空if (0 == Seq->size)return 1;return 0;}void PrintSeqList(pSeqlist Seq){//遍历顺序表int i = 0;for (i = 0; i < Seq->size; i++){printf("%d", Seq->array[i]);}printf("\n");}






0 0
原创粉丝点击