c::动态顺序表的简单实现
来源:互联网 发布:双十一淘宝津贴怎么用 编辑:程序博客网 时间:2024/06/05 08:29
我简单的实现下动态顺序表:
1、声明:
#ifndef __TEST__#define __TEST__#include<stdio.h>#include<assert.h>typedef int Datatype;typedef struct SeqListdD{Datetype* array;int size; //有效元素的个数int capacity; //空间的总容量}SeqListD,*PSeqListD;//初始化动态顺序表void InitpSeqList(PSeqListD pSeqListD);//打印动态顺序表void Print(PSeqListD pSeqListD);//判断动态顺的序表的空间是否已满,满的话进行扩容int CheckCapacity(PSeqListD pSeqListD);//尾插void PushBack(PSeqListD pSeqListD,Datatype data);//尾删void PopBack(PSeqListD pSeqListD);//头插void PushFront(PSeqListD pSeqListD,Datatype data);//头删void PopFront(PSeqListD pSeqListD);//在特定的位置插入元素void Insert(PSeqListD pSeqListD,int pos,Datatype data);//在特定的位置删除元素void Erase(PSeqListD pSeqListD,int pos);//查找特定元素int Find(PSeqListD pSeqListD,Datatype data);//求动态顺序表的长度int Size(PSeqListD pSeqListD);//求动态顺序表的容量int Capacity(PSeqListD pSeqListD);//清空动态顺序表void Clear(PSeqListD pSeqListD);//求动态顺序表的长度int Size(PSeqListD pSeqListD);//求动态顺序表的容量int Capacity(PSeqListD pSeqListD);//清空动态顺序表void Clear(PSeqListD pSeqListD);//去除特定元素int Remove(PSeqListD pSeqListD,Datatype data);//去除动态顺序表中所有相同的元素void RemoveAll(PSeqListD pSeqListD,Datatype data);//冒泡排序void BubbleSort(PSeqList pSeqList);//选择法排序void SelectSort(PSeqList pSeqList);//二分查找int BinarySearch(PSeqList pSeqList, DataType data);//二分递归查找//销毁动态顺序表void Destroy(PSeqListD pSeqListD);#endif
2、函数体的实现:
#include"test.h"//初始化动态顺序表void InitpSeqList(PSeqListD pSeqListD){assert(pSeqListD);pSeqListD->capacity = 5;pSeqListD->size = 0;pSeqListD->array = (Datatype*)malloc(sizeof(Datatype)*capacity);}//打印动态顺序表void Print(PSeqListD pSeqListD){int i = 0;assert(pSeqListD);if(pSeqListD->size<=0){printf("此动态顺序表为空!无法打印!");return;}for(i = 0; i<pSeqListD->size; i++){printf("%d ",pSeqListD->array[i]);}printf("\n");}//判断动态顺的序表的空间是否已满,满的话进行扩容int CheckCapacity(PSeqListD pSeqListD) {assert(pSeqListD);if(pSeqListD->size >= pSeqListD->capacity){Datatype* ptemp = pSeqListD->array;pSeqListD->array = (Datatype*)relloc(pSeqListD->array,sizeof(Datatype)*(capacity*2));if(pSeqListD->array == NULL){printf("扩容失败!");pSeqListD->array = ptemp;return -1;}else{pSeqListD->capacity = pSeqListD->capacity *2;}}return 1;}//尾插void PushBack(PSeqListD pSeqListD,Datatype data){assert(pSeqListD);if(1 == CheckCapacity(pSeqListD)){pSeqListD->array[size] = data;}++pSeqListD->size;}//尾删void PopBack(PSeqListD pSeqListD){assert(pSeqListD);if(pSeqListD->size == 0){printf("动态顺序表为空,无法删除!");}--pSeqListD->size;}//头插void PushFront(PSeqListD pSeqListD,Datatype data){int i = 0;assert(pSeqListD);if(1 == CheckCapacity(pSeqListD)){for(i = pSeqListD->size-1; i>=0; i--){pSeqListD->array[i+1] = pSeqListD->array[i];}pSeqListD->array[0] = data;}++pSeqListD->size;}//头删void PopFront(PSeqListD pSeqListD){int i = 0;assert(pSeqListD);if(pSeqListD->size == 0){printf("动态顺序表为空,无法删除!");}for(i = 1; i<pSeqListD->size-1; i++){pSeqListD->array[i] = pSeqListD->array[i+1];}--pSeqListD->size;}//在特定的位置插入元素void Insert(PSeqListD pSeqListD,int pos,Datatype data){int i = 0;assert(pSeqListD);if(1 == CheckCapacity(pSeqListD)){for(i = pSeqListD->size-1; i>=pos; i--){pSeqListD->array[i+1] = pSeqListD->array[i];}pSeqListD->array[pos] = data;}++pSeqListD->size;}//在特定的位置删除元素void Erase(PSeqListD pSeqListD,int pos){int i = 0;assert(pSeqListD);for(i = pos; i<pSeqListD->size; i++){pSeqListD->array[i] = pSeqListD->array[i+1];}--pSeqListD->size;}//查找特定元素int Find(PSeqListD pSeqListD,Datatype data){int i = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size; i++){if(pSeqListD->array[i] == data)return 1;}return -1;}//求动态顺序表的长度int Size(PSeqListD pSeqListD){return pSeqListD->size;}//求动态顺序表的容量int Capacity(PSeqListD pSeqListD){return pSeqListD->capacity;}//清空动态顺序表void Clear(PSeqListD pSeqListD){/*int i = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size; i++){PopBack(pSeqListD);}*/assert(pSeqListD);pSeqListD->size = 0;}//销毁动态顺序表void Destroy(PSeqListD pSeqListD){pSeqListD->size = 0;pSeqListD->capacity = 0;free pSeqListD->array;}//去除特定元素int Remove(PSeqListD pSeqListD,Datatype data){int i = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size; i++){if(pSeqListD->array[i] == data)return 1;}return -1;}//去除动态顺序表中所有相同的元素void RemoveAll(PSeqListD pSeqListD,Datatype data){int count = 0;int i = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size; i++){if(pSeqListD->array[i] == data){count++; //用count来记录要删除的元素出现的次数}else //当碰到不是要删除的元素时,将此元素向前挪动count步{while(--count){pSeqListD->array[i] = pSeqListD->array[i+1];}}}}//冒泡排序void BubbleSort(PSeqList pSeqList){int i = 0;int j = 0;int temp = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size-1; i++){ for(j = 0; j<pSeqListD->size-i-1; j++){if(pSeqListD->array[j]>pSeqList->array[j+1]){temp = pSeqListD->array[j];pSeqListD->array[j] = pSeqList->array[j+1];pSeqList->array[j+1] = temp;}}}}//选择法排序void SelectSort(PSeqList pSeqList){int i = 0;int j = 0;int temp = 0;assert(pSeqListD);for(i = 0; i<pSeqListD->size; i++){int minpos = i;for(j = 0; j<pSeqListD-1; j++){if(pSeqListD->array[j]<pSeqListD->array[minpos]){minpos = j;}}temp = pSeqListD->array[minpos];pSeqListD->array[minpos] = pSeqListD->array[i];pSeqListD->array[i] = t;}}//二分查找int BinarySearch(PSeqList pSeqList, DataType data){assert(pSeqListD);int left = 0;int right = pSeqListD->size-1;int mid = 0;while(left<=right){mid = left-((left-right)>>1);if(pSeqListD->array[mid] == data){return mid;}else if(pSeqListD->array[mid] > data){right = mid--;}else{left = mid++;}}return -1;}//二分递归查找int BinarySearch(PSeqListD pSeqListD,int left,int right,Datatype data){assert(pSeqListD);int mid = left-((left-right)>>1);if(pSeqListD->array[mid] == data)return mid;else if(pSeqListD->array[mid] > data){BinarySearch(pSeqListD,left,mid--,data);}else(pSeqListD->array[mid] > data){BinarySearch(pSeqListD,left,mid--,data);}return 0;}
0 0
- c::动态顺序表的简单实现
- C语言:动态顺序表的简单实现
- C简单实现动态顺序表
- C语言简单实现动态顺序表
- 简单的动态顺序表实现
- 动态顺序表的简单实现
- C语言动态顺序表的实现
- c语言动态顺序表的实现
- 【C语言】动态顺序表的实现
- 简单实现动态顺序表
- 动态实现简单【顺序表】
- C语言顺序表的简单实现
- 线性表的顺序动态存储——C语言实现简单函数
- 动态顺序表部分接口的简单实现
- 简单的动态顺序表实现 不足之处请留言指出
- 动态顺序栈的简单实现
- 静态和动态顺序表的实现(c语言)
- C语言 顺序表的实现 (动态)
- python Flask学习笔记(一)
- PAT A1063
- redis分布式锁的实现及问题分析
- aChartEngine小结
- Perl知识点滴
- c::动态顺序表的简单实现
- pyqt4之sqlite数据库连接测试
- 小博老师解析Java核心技术 ——JSwing文本域和滚轴控件
- myeclipse10导入其他地方的项目时jsp报错的有效解决方法
- 防止过拟合的处理方法
- Java面向对象特点----继承
- python sdk 获取新浪微博签到信息
- byte最大值和最小值
- 算法导论学习日记(4)插入排序的递归版本