动态顺序表
发布日期:2021-09-19 03:18:16
浏览次数:2
分类:技术文章
本文共 5382 字,大约阅读时间需要 17 分钟。
动态顺序表
Capacity 指的是顺序表的容量,并不是实际存储的有效数据
size 当前顺序表的有效数据个数
头文件
SeqList.h
#ifndef __SEQLIST_H__#define __SEQLIST_H__#endif __SEQLIST_H__#include函数的实现#include #include #include #pragma warning(disable:4996)#define MAX 100#define DEFAULT_SZ 3#define INC_SZ 2typedef int DataType;typedef struct SeqList{ size_t capacity;//容量 size_t size;//有效 DataType *array;//指向堆上的空间}SeqLipst, *pSeqList;void InitSeqList(pSeqList p);void DestroySeqList(pSeqList p);void CheckCapacity(pSeqList p);void PushBack(pSeqList p, DataType d);void PopBack(pSeqList p);void PushFront(pSeqList p, DataType d);void PopFront(pSeqList p);void Show(pSeqList p);int Find(pSeqList p, DataType d);void Remove(pSeqList p, DataType d);void RemoveAll(pSeqList p, DataType d);int BinarySearch(pSeqList p, DataType d);//二分查找void Sort(pSeqList p);
SeqList.c
#include"SeqList.h"#pragma warning(disable:4996)void InitSeqList(pSeqList p){ p->array = (DataType* )malloc(DEFAULT_SZ* sizeof(DataType)*MAX); if (p->array == NULL) { perror("malloc"); return; } p->capacity = 0; p->size = 0; memset(p->array, 0, sizeof(DataType)*DEFAULT_SZ);}void DestroySeqList(pSeqList p){ assert(p != NULL); free(p->array);}void CheckCapacity(pSeqList p){ assert(p != NULL); DataType *tmp = NULL; if (p->capacity==p->size) { tmp = (DataType*)realloc(p->array, (p->capacity + INC_SZ)*sizeof(DataType)); if (tmp != NULL) { p->array = tmp; } } p->capacity += INC_SZ;}void PushBack(pSeqList p, DataType d){ CheckCapacity(p); p->array[p->size] = d; p->size++;}void PopBack(pSeqList p){ assert(p); if (p->size == 0) { printf("the seqlist is empty\n"); return; } p->size--;}void PushFront(pSeqList p, DataType d){ int i = 0; assert(p); CheckCapacity(p); if (p->size == 0) { p->array[0] = d; p->size++; } else { for (i = p->size; i > 0; i--) { p->array[i] = p->array[i - 1]; } p->array[0] = d; p->size++; }}void PopFront(pSeqList p){ size_t i = 0; assert(p); if (p->size == 0) { printf("the seqlist is empty\n"); return; } for (i = 0; i < p->size-1; i++) { p->array[i] = p->array[i + 1]; } p->size--;}int Find(pSeqList p, DataType d){ size_t i = 0; assert(p); for (i = 0; i < p->size; i++) { if (p->array[i]==d) { return i; } } return -1;}void Remove(pSeqList p, DataType d){ size_t pos = 0; size_t i = 0; assert(p); if (p->size == 0) { printf("the seqlist is empty\n"); return; } pos = Find(p, d); if (pos == -1) { printf("没有找到该数字\n"); return; } for (i = pos; i < p->size-1; i++) { p->array[i] = p->array[i + 1]; } p->size--;}void RemoveAll(pSeqList p, DataType d){ size_t i = 0; size_t pos = 0; assert(p); while (pos=Find(p,d)!=-1) { for (i = pos; i < p->size - 1; i++) { p->array[i] = p->array[i + 1]; } p->size--; }}int BinarySearch(pSeqList p, DataType d)//二分查找{ int i = 0; int left = 0; int right = p->size - 1; int mid = 0; assert(p); while (left <= right) { mid = left + (right - left) / 2; if (p->array[mid] > d) { right = mid - 1; } else if (p->array[mid] < d) { left = left + 1; } else return mid; } return -1;}void Sort(pSeqList p){ assert(p); if (p->size == 0) { printf("the seqlist is empty\n"); return; } for (size_t i = 0; i < p->size-1; i++) { for (size_t j = 0; j测试size-1; j++) { if (p->array[j] < p->array[j + 1]) { DataType tmp = p->array[j]; p->array[j] = p->array[j + 1]; p->array[j + 1] = tmp; } } }}void Show(pSeqList p){ size_t i = 0; assert(p); if (p->size == 0) { printf("the seqlist is empty\n"); return; } for (i = 0; i < p->size; i++) { printf("%d", p->array[i]); } printf("\n");}
text.c
#include"SeqList.h"#pragma warning(disable:4996)void menu(){ printf("************************************\n"); printf(" 1.PushBack 2.PopBack \n"); printf(" 3.PushFront 4.PopFront\n"); printf(" 5.Show 6.Remove \n"); printf(" 7.RemoveAll 8.Sort \n"); printf(" 9.BinarySearch 10.Find \n"); printf(" 0.Exit \n"); printf("************************************\n");}int main(){ SeqLipst mylist; int input = 0; InitSeqList(&mylist); do { menu(); printf("请选择:>\n"); scanf("%d", &input); switch (input) { DataType data = 0; case 1: printf("请选择要插入的元素:>"); scanf("%d", &data); PushBack(&mylist, data); break; case 2: PopBack(&mylist); break; case 3: printf("请选择要插入的元素:>"); scanf("%d", &data); PushFront(&mylist, data); break; case 4: PopFront(&mylist); break; case 5: Show(&mylist); break; case 6: printf("请选择要删除的元素:>"); scanf("%d", &data); Remove(&mylist, data); break; case 7: printf("请选择要删除的元素:>"); scanf("%d", &data); RemoveAll(&mylist, data); break; case 8: Sort(&mylist); break; case 9: { int ret = 0; printf("请输入要查找的元素\n"); scanf("%d", &data); ret = BinarySearch(&mylist, data); if (ret = -1) { printf("查找的元素不存在\n"); } else { printf("元素的下标为%d\n", ret); } break; } case 10: { int ret2 = 0; printf("请输入要查找的元素\n"); scanf("%d", &data); ret2 = Find(&mylist, data); if (ret2 == -1) { printf("查找的元素不存在\n"); } else { printf("元素的下标为%d\n", ret2); } break; } case 0: break; default: printf("输入错误,请重新输入:"); break; } }while(input); DestroySeqList(&mylist); system("puase\n"); return 0;}
转载地址:https://blog.csdn.net/audience_fzn/article/details/76785284 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月20日 00时35分49秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Elmo运动控制器 —— Maestro Software结构和接口
2019-04-28
Power PMAC运动控制器 —— 学习笔记2
2019-04-28
运动控制 —— 强大的状态机工具
2019-04-28
Platinum Maestro运动控制器 —— PVT模式笔记
2019-04-28
Platinum Maestro运动控制器 —— 运动程序笔记
2019-04-28
PID算法原理及参数调整原则
2019-04-28
Platinum Maestro运动控制器 ——速度位置等数据的获取
2019-04-28
Platinum Maestro运动控制器 ——Ssh登录控制器
2019-04-28
基础笔记2 —— 不损失精度的前提下浮点数拆分成整型的方法浅析
2019-04-28
数据类型在内存中的存储
2019-04-28
循环神经网络(LSTM)实现股票预测-深度学习100例 | 第10天
2019-04-28
Python3--爬取数据之911网站信息爬取
2019-04-28
Python--format()学习记录
2019-04-28
Python--切片学习记录
2019-04-28
Python--判断一个字符串是否包含某子串的几种方法
2019-04-28
pandas包
2019-04-28
Python爬虫之图片爬取
2019-04-28
Python--音频文件分类代码
2019-04-28
Python3--baby网的数据爬取
2019-04-28
Python--读取csv文件的整列
2019-04-28