静态顺序表
来源:互联网 发布:苹果室内设计软件 编辑:程序博客网 时间:2024/05/18 08:21
#include<stdio.h>#include<assert.h> #include<malloc.h>typedef int DataType;#define MaxSize 10typedef struct SeqList{ DataType array[MaxSize]; int size; // 有效数据元素的个数}SeqList;//////////////////////////////////////// 初始化顺序表void InitSeqList(SeqList* pSeq){ assert(pSeq); memset(pSeq->array,0, sizeof(DataType)*MaxSize); pSeq->size=0;}// 在顺序表的尾部插入值为data的元素void PushBack(SeqList* pSeq, DataType data){ assert(pSeq); if(pSeq->size>=MaxSize) return; pSeq->array[pSeq->size++]=data;} //删除顺序表的最后一个元素void PopBack(SeqList* pSeq){ assert(pSeq); if(0==pSeq->size) return; pSeq->size--;}// 在顺序表的头部插入值为data的元素void PushFront(SeqList* pSeq, DataType data){ int idx=0; assert(pSeq); if(pSeq->size>=MaxSize) return; for(idx=pSeq->size-1;idx>=0;idx--) { pSeq->array[idx+1]=pSeq->array[idx]; } pSeq->array[0]=data; pSeq->size++;}// 删除顺序表头部元素void PopFront(SeqList* pSeq){ int idx=0; assert(pSeq); if(0==pSeq->size) return; for(idx;idx<pSeq->size;idx++) pSeq->array[idx]=pSeq->array[idx+1]; pSeq->size--;}// 在顺序表中pos位置上插入值为data的元素void Insert(SeqList* pSeq, size_t pos, DataType data){ size_t idx=0; assert(pSeq); if(NULL==pSeq||pos>pSeq->size||pSeq->size>MaxSize) return; for(idx=pSeq->size-1;idx>=pos;idx--) { pSeq->array[idx+1]=pSeq->array[idx]; } pSeq->array[pos]=data; pSeq->size++;}// 删除顺序表中pos位置上的元素void Erase(SeqList* pSeq, size_t pos){ size_t idx=0; assert(pSeq); if(NULL==pSeq||pSeq->size==0||pos>pSeq->size) return; for(idx=pos;idx<pSeq->size-1;idx++) pSeq->array[idx]=pSeq->array[idx+1]; pSeq->size--;}// 在顺序表中查找值为data的元素,找到返回该元素的位置,否则返回-1int Find(SeqList* pSeq, DataType data){ size_t idx=0; assert(pSeq); for(idx;idx<pSeq->size;++idx) { if(pSeq->array[idx]==data) return idx; } return -1;}// 删除顺序表中第一个值为data的元素void Remove(SeqList* pSeq, DataType data){ assert(pSeq); Erase(pSeq,Find(pSeq,data));}// 删除顺序表中所有值为data的元素void RemoveAll(SeqList* pSeq, DataType data){ int pos; assert(pSeq); while(-1!=(pos=Find(pSeq,data))) { Erase(pSeq,pos); }}// 使用冒泡排序给顺序表中的元素排序void BubbleSort(SeqList* pSeq)//由小到大{ int i=0; int j=0; int flag=0; assert(pSeq); for(i=0;i<pSeq->size-1;i++) { flag=0; for(j=0;j<pSeq->size-i-1;j++) { if(pSeq->array[j]>pSeq->array[j+1]) { DataType tmp=pSeq->array[j]; pSeq->array[j]=pSeq->array[j+1]; pSeq->array[j+1]=tmp; flag=1; } } if(0==flag) return; }}// 使用选择排序给顺序表中的元素排序void SelectSort(SeqList* pSeq)//由小到大{ int i=0; int j=0; int pos=0; assert(pSeq); for(i=0;i<pSeq->size-1;i++) { pos=0; for(j=1;j<pSeq->size-i;j++) { if(pSeq->array[j]>pSeq->array[pos]) { pos=j;//一直循环到pos为最大元素的位置 } } if(pos!=j-1) { DataType tmp=pSeq->array[pos]; pSeq->array[pos]=pSeq->array[j-1]; pSeq->array[j-1]=tmp; } }}// 使用二分查找在顺序表中查找值为dataint BinarySearch(SeqList* pSeq, DataType data){ int left=0; int mid=0; int right=0; assert(pSeq); right=pSeq->size-1; while(left<=right) { mid=left+((right-left)>>1); if(pSeq->array[mid]==data) return mid; else if(pSeq->array[mid]>data) right=mid-1; else left=mid+1; }}void PrintList(SeqList* pSeq){ size_t i=0; assert(pSeq); if(pSeq==NULL) printf("The seqlist is empty"); else if(pSeq->size>=MaxSize) printf("The seqlist is full"); else { for(i;i<pSeq->size;i++) printf("%2d",pSeq->array[i]); printf("\n"); } }void FunTest(){ int pos=0; SeqList list1; InitSeqList(&list1); PushBack(&list1,0); PushBack(&list1,7); PushBack(&list1,3); PushBack(&list1,2); PushBack(&list1,5); PushBack(&list1,6); PushBack(&list1,5); PrintList(&list1); //PopBack(&list); //PushFront(&list,2); ////PopFront(&list); //Insert(&list,1,3); //Erase(&list,1,3); //Find(&list,2); //Remove(&list,2); //RemoveAll(&list,5); BubbleSort(&list1); PrintList(&list1); SelectSort(&list1); PrintList(&list1); pos=BinarySearch(&list1,5); printf("%d\n",pos);}int main(){ FunTest(); return 0;}
0 0
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 顺序表(静态)
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 简易静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 顺序表(静态)
- 顺序表(静态)
- 静态,动态顺序表
- 静态顺序表
- Android Emoji的处理
- C# 哈希加密
- 下载文件时,为什么要使用URLEncoder编码名称
- 通过xml文件配置 spring自动装配5中模式
- 任意进制转换
- 静态顺序表
- cordova 常用命令、插件
- MySQL操作权限增删改查
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- HSV to RGB and RGB to HSV
- 大数据教程(四)—— Hadoop集群VSFTP和SecureCRT安装配置
- unity重要路径
- java基础-输入流输出流总结
- 使用File.createNewFile报错No such file