动态顺序表(C语言实现)
来源:互联网 发布:淘宝怎么看买家秀 编辑:程序博客网 时间:2024/05/21 07:49
数据结构:
typedef int DataType,*pDataType;typedef struct Seqlist{ pDataType pdata;//指向动态开辟的区域 int sz;//有效个数 int capacity;//容量} Seqlist,*pSeqlist;
方法:
void InitSeqlist(pSeqlist ps);//初始化void DestroySeqlist(pSeqlist ps);//销毁void PushBack(pSeqlist ps, DataType d);//后插void PrintBack(pSeqlist ps);//打印void PopBack(pSeqlist ps);//后删void PushFront(pSeqlist ps,DataType d);//前插void PopFront(pSeqlist ps);//前删void Insert(pSeqlist ps, int pos, DataType d);//指定位置插入int Find(pSeqlist ps, DataType d);//遍历排序void Remove(pSeqlist ps, DataType d);//删除void ReverseSeqlist(pSeqlist ps);//逆序void SortSeqlist(pSeqlist ps);//排序int BinarySearch(pSeqlist ps, DataType d);//二分查找
代码实现:
test.c
#include"Seqlist_D.h"void test(){ Seqlist seqlist; int ret = 0; InitSeqlist(&seqlist);//初始化 PushBack(&seqlist, 1);//后插 PushBack(&seqlist, 2);//后插 PushBack(&seqlist, 3);//后插 PushBack(&seqlist, 4);//后插 PushBack(&seqlist, 5);//后插 PrintBack(&seqlist);//打印 PopBack(&seqlist);//后删 PushFront(&seqlist, 2);//前插 PrintBack(&seqlist);//打印 PopFront(&seqlist);//前删 PrintBack(&seqlist);//打印 ret = Find(&seqlist, 2);//遍历排序 printf("%d \n",ret); Insert(&seqlist, 1, 5);//指定位置插入 PrintBack(&seqlist);//打印 Remove(&seqlist, 2);//删除 PrintBack(&seqlist);//打印 ReverseSeqlist(&seqlist);//逆序 PrintBack(&seqlist);//打印 SortSeqlist(&seqlist);//排序 PrintBack(&seqlist);//打印 ret = BinarySearch(&seqlist, 2);//二分查找 printf("%d \n",ret);}int main(){ test(); return 0;}
Seqlist_D.h
#ifndef __SEQLIST_D_H__#define __SEQLIST_D_H__#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define DEFALUT_SZ 3//初始化分配元素个数#define DEFALUT_INC 2//增容时增加元素个数#define FORMAT "%d "typedef int DataType,*pDataType;typedef struct Seqlist{ pDataType pdata;//指向动态开辟的区域 int sz;//有效个数 int capacity;//容量} Seqlist,*pSeqlist;void InitSeqlist(pSeqlist ps);//初始化void DestroySeqlist(pSeqlist ps);//销毁void PushBack(pSeqlist ps, DataType d);//后插void PrintBack(pSeqlist ps);//打印void PopBack(pSeqlist ps);//后删void PushFront(pSeqlist ps,DataType d);//前插void PopFront(pSeqlist ps);//前删void Insert(pSeqlist ps, int pos, DataType d);//指定位置插入int Find(pSeqlist ps, DataType d);//遍历排序void Remove(pSeqlist ps, DataType d);//删除void ReverseSeqlist(pSeqlist ps);//逆序void SortSeqlist(pSeqlist ps);//排序int BinarySearch(pSeqlist ps, DataType d);//二分查找#endif//__SEQLIST_D_H__
Seqlist_D.c
#include"Seqlist_D.h"void IncreatCatacity(pSeqlist ps)//增容{ pDataType tmp = NULL; assert(ps != NULL); tmp = (pDataType)realloc(ps->pdata, (ps->capacity + DEFALUT_INC)*sizeof(DataType)); if (tmp == NULL) { printf("增容失败!\n"); } else { ps->pdata = tmp; ps->capacity += DEFALUT_INC; }}void InitSeqlist(pSeqlist ps)//初始化{ pDataType tmp = NULL; assert(ps != NULL); tmp = (pDataType)malloc(DEFALUT_SZ*sizeof(DataType)); if (tmp == NULL) { printf("初始化失败!\n"); } else { ps->pdata = tmp; ps->capacity = DEFALUT_SZ; ps->sz = 0; }}void DestroySeqlist(pSeqlist ps)//销毁{ assert(ps != NULL); ps->sz = 0; ps->capacity = 0; free(ps->pdata);}void PushBack(pSeqlist ps, DataType d)//后插{ assert(ps != NULL); if (ps->sz == ps->capacity) { IncreatCatacity(ps); ps->pdata[ps->sz] = d; ps->sz++; } else { ps->pdata[ps->sz] = d; ps->sz++; }}void PrintBack(pSeqlist ps)//打印{ int i = 0; assert(ps != NULL); for (i = 0; i < ps->sz; i++) { printf(FORMAT, ps->pdata[i]); } printf("\n");}void PopBack(pSeqlist ps)//后删{ assert(ps != NULL); if (ps->sz == 0) { printf("顺序表为空,删除失败!\n"); } else { ps->sz--; }}void PushFront(pSeqlist ps, DataType d)//前插{ int i = 0; assert(ps != NULL); if (ps->capacity == ps->sz) { IncreatCatacity(ps); for (i = ps->sz; i > 0; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[0] = d; ps->sz++; } else { for (i = ps->sz; i > 0; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[0] = d; ps->sz++; }}void PopFront(pSeqlist ps)//前删{ int i = 0; assert(ps != NULL); if (ps->sz == 0) { printf("顺序表为空,删除失败!\n"); } else { for (i = 0; i < ps->sz - 1; i++) { ps->pdata[i] = ps->pdata[i + 1]; } ps->sz--; }}void Insert(pSeqlist ps, int pos, DataType d)//指定位置插入{ int i = 0; assert(ps != NULL); if (ps->sz == ps->capacity) { IncreatCatacity(ps); if ((pos<0)||(pos>ps->sz)) { printf("插入位置有误!\n"); } else { for (i = ps->sz; i >pos; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[pos] = d; ps->sz++; } } else { if ((pos<0) || (pos>ps->sz)) { printf("插入位置有误!\n"); } else { for (i = ps->sz; i >pos; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[pos] = d; ps->sz++; } }}int Find(pSeqlist ps, DataType d)//遍历排序{ int i = 0; assert(ps != NULL); for (i = 0; i < ps->sz; i++) { if (ps->pdata[i] == d) return i; } return -1;}void Remove(pSeqlist ps, DataType d)//删除{ int ret = 0; int i = 0; assert(ps != NULL); ret = Find(ps,d); if (ret == -1) { printf("未找到所要删除的元素!\n"); } else { for (i = ret; i < ps->sz - 1; i++) { ps->pdata[i] = ps->pdata[i + 1]; } ps->sz--; }}void ReverseSeqlist(pSeqlist ps)//逆序{ int left = 0; int right = 0; DataType tmp = 0; assert(ps != NULL); right = ps->sz - 1; while (left < right) { tmp = ps->pdata[left]; ps->pdata[left] = ps->pdata[right]; ps->pdata[right] = tmp; left++; right--; }}void SortSeqlist(pSeqlist ps)//排序{ int i = 0; int j = 0; DataType tmp = 0; assert(ps != NULL); for (i = 0; i < ps->sz - 1; i++) { for (j = 0; j < ps->sz - 1 - i; j++) { if (ps->pdata[j] > ps->pdata[j + 1]) { tmp = ps->pdata[j]; ps->pdata[j] = ps->pdata[j + 1]; ps->pdata[j + 1] = tmp; } } }}int BinarySearch(pSeqlist ps, DataType d)//二分查找{ int left = 0; int right = 0; int mid = 0; assert(ps != NULL); right = ps->sz - 1; while (left <= right) { mid = left + ((right - left) >> 1); if (ps->pdata[mid]>d) { right = mid - 1; } else if (ps->pdata[mid]<d) { left = mid + 1; } else { return mid; } } return -1;}
结果贴图:
阅读全文
1 0
- 动态顺序表(C语言实现)
- C语言实现动态顺序表
- c语言实现动态顺序表
- 利用C语言实现动态顺序表
- C语言实现动态顺序表
- c语言顺序表动态实现
- 动态顺序表----C语言实现
- C语言实现动态顺序表
- C语言动态顺序表的实现
- C语言实现动态顺序表
- C语言实现动态顺序表
- C语言实现动态顺序表
- c语言动态顺序表的实现
- C语言简单实现动态顺序表
- 【C语言】动态顺序表的实现
- 动态顺序表-c语言实现
- 【C语言】实现动态顺序表
- C语言实现动态顺序表
- Kotlin Reference (二) idioms 一些常用方式
- 如何节省内存空间
- 蓝桥-BASIC-27-2n皇后问题
- react路由提高(Prompt、Redirect、match、Switch)
- xml生成
- 动态顺序表(C语言实现)
- leetcode 42. Trapping Rain Water
- 解决oracle速度变慢
- angular2 Http请求
- [LeetCode] Unique Paths II 起点与终点确定的路径数II
- 插入法 排列 linked list
- Python基础(4)-文件操作
- Gradle版本管理-升级与降级
- hbase安装中遇到的一些问题及解决办法