动态顺序表
2017-04-11 20:36
302 查看
动态顺序表结构:
动态顺序表部分操作:
typedef int DataType; typedef struct SeqListD { DataType* array;//数据指针 size_t capacity; //容量 size_t size; //有效元素的个数 }SeqListD, *PSeqListD;
动态顺序表部分操作:
#include"seqlist.h" void InitSeqListD(PSeqListD pSeq)//初始化 { pSeq->array = (DataType*)malloc(sizeof(DataType)*SIZE); if (NULL == pSeq->array) exit(-1); pSeq->capacity = SIZE; pSeq->size = 0; } void CheckCapacity(PSeqListD pSeq)//检测容量 { if (pSeq->size == pSeq->capacity) { DataType* tmp = (DataType*)realloc(pSeq->array, (pSeq->capacity + 3)*sizeof(DataType)); if (NULL == tmp) exit(-1); pSeq->array = tmp; pSeq->capacity += 3; } } void PushBack(PSeqListD pSeq, DataType data)//尾插 { CheckCapacity(pSeq); pSeq->array[pSeq->size] = data; pSeq->size += 1; } void PopBack(PSeqListD pSeq)//尾删 { assert(pSeq); if (pSeq->size > 0) { pSeq->size -= 1; } } void PopFront(PSeqListD pSeq)//头删 { size_t i = 0; for (i = 0; i < pSeq->size - 1; ++i) { pSeq->array[i] = pSeq->array[i + 1]; } pSeq->size -= 1; } void PushFront(PSeqListD pSeq, DataType data)//头插 { assert(pSeq); size_t i = 0; CheckCapacity(pSeq);//检测容量 for (i = pSeq->size; i > 0; --i) { pSeq->array[i] = pSeq->array[i - 1]; } pSeq->array[i] = data; pSeq->size += 1; } void PrintSeqlist(PSeqListD pSeq)//打印 { size_t i = 0; for (; i < pSeq->size; ++i) { printf("%d ",pSeq->array[i]); } printf("\n"); } void Erase(PSeqListD pSeq, size_t pos) { assert(pSeq); size_t i = 0; for (i = pos; i < pSeq->size - 1; ++i) { pSeq->array[i] = pSeq->array[i + 1]; } pSeq->size -= 1; } int Find(PSeqListD pSeq, DataType data)//查找值为data的元素 { assert(pSeq); size_t i = 0; for (; i < pSeq->size; ++i) { if (pSeq->array[i] == data) return i; } return -1; } void RemoveAll(PSeqListD pSeq, DataType data)//移除所有值相等的元素 { assert(pSeq); size_t i = 0, count = 0; for (; i < pSeq->size; ++i) { if (pSeq->array[i] == data) { ++count; } else { pSeq->array[i - count] = pSeq->array[i]; } } pSeq->size -= count; } void Destroy(PSeqListD pSeqList)//销毁 { if (NULL != pSeqList) { free(pSeqList->array); pSeqList->array = NULL; pSeqList->capacity = 0; pSeqList->size = 0; } } void Insert(PSeqListD pSeq, size_t pos, DataType data)//任意位置插入 { assert(pSeq); size_t i = 0; for (i = pSeq->size; i > pos; --i) { pSeq->array[i] = pSeq->array[i - 1]; } pSeq->array[i] = data; pSeq->size += 1; } void BubbleSort(PSeqListD pSeq)//冒泡排序 { assert(pSeq); size_t i, j,tmp; for (i = 0; i < pSeq->size - 1; ++i) { for (j = pSeq->size - 1; j>i; --j) { if (pSeq->array[i] > pSeq->array[j]) { tmp = pSeq->array[i]; pSeq->array[i] = pSeq->array[j]; pSeq->array[j] = tmp; } } } } void SelectSort(PSeqListD pSeq)//选择排序 { assert(pSeq); size_t min_num = 0; size_t i,j,tmp; for (i = 0; i < pSeq->size-1; ++i) { min_num = i; for (j = i + 1; j < pSeq->size;j++) { if (pSeq->array[j] < pSeq->array[min_num]) { min_num = j; } } if (min_num != i) { tmp = pSeq->array[i]; pSeq->array[i] = pSeq->array[min_num]; pSeq->array[min_num] = tmp; } } } //区间[] int BinarySearch(PSeqListD pSeq, DataType data) { assert(pSeq); size_t left = 0; size_t right = pSeq->size-1; size_t mid = 0; 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; } } return mid; } //区间 --》[) int BinarySearch(PSeqListD pSeq, DataType data) { assert(pSeq); size_t left = 0; size_t right = pSeq->size;//****** size_t mid = 0; 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;//****** } } return mid; } void InsertSearch(PSeqListD pSeq)//插入排序 { assert(pSeq); int target = 0; size_t i,j; for (i=1; i < pSeq->size; ++i) { target = pSeq->array[i];//待插入 j = i; while (j>0 && pSeq->array[j-1]>target )//后移 { pSeq->array[j] = pSeq->array[j - 1]; j--; } pSeq->array[j] = target;//插入 } }
相关文章推荐
- tp3.2 excel导出动态追加列并修改顺序
- 实现静态顺序表和动态顺序表
- (C语言)顺序表之动态实现
- 动态顺序表
- 【数据结构】动态顺序栈的增删改查
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现) (转载)
- 动态顺序表 与 双向链表的模板类
- UML动态模型(顺序图、协作图、状态图)
- 利用动态宏实现根据字符串参数顺序确定多层分组顺序
- 《算法导论》第14章 数据结构的扩张 (1)动态顺序统计
- 不按先后顺序比较字符串序列是否相同(动态SQL)
- 动态顺序表
- 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
- [转]通过js动态创建table并调整tr顺序
- 动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
- Android仿支付宝扣款顺序,动态改变ListView各Item次序
- 《算法导论》第14章 数据结构的扩张 (1)动态顺序统计
- 动态顺序表----C语言实现
- 简单实现动态顺序表
- 动态构建顺序表,合并两个顺序表(C语言)