静态顺序表的实现(增删查改排序)
2017-09-17 23:12
417 查看
[align=center]
顺序表的各种操作实现[/align]
#define _CRT_SECURE_NO_WARNINGS 1#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef int DataType;#define N 100//结构体定义typedef struct SeqList{DataType array; // 数组size_t size; // 有效数据的个数}SeqList;void InitSeqList(SeqList* s);void PushBack(SeqList* s, DataType x);void PopBack(SeqList* s);void PushFront(SeqList* s, DataType x);void PopFront(SeqList* s);void Insert(SeqList* s, size_t pos, DataType x);void Erase(SeqList* s, size_t pos);int Find(SeqList* s, DataType x);void Modify(SeqList* s, size_t pos, DataType x);int Remove(SeqList* s, DataType x);int RemoveAll(SeqList* s, DataType x);void BubbleSort(SeqList* s);void SelectSort(SeqList* s);void SelectSort_OP(SeqList* s);int BinarySearch(SeqList* s, DataType x);//初始化void InitSeqList(SeqList* s){memset(s->array, 0, sizeof(DataType)*N);s->size = 0;}//打印顺序表void PrintSeqlist(SeqList *s){for (size_t i = 0; i < s->size; ++i){printf("%d", s->array[i]);}printf("\n");}//尾插void PushBack(SeqList* s, DataType x){assert(s);if (s->size == N){printf("array is full");return;}s->array[s->size] = x;s->size++;}//尾删void PopBack(SeqList* s){int start = 0;if (s->size == 0){printf("SeqList is kong");return;}s->array[s->size-1] = 0;s->size--;}//头插void PushFront(SeqList* s, DataType x){assert(s);if (s->size == 0){printf("SeqList is kong");}for (int end = s->size-1; end >= 0; --end){s->array[end + 1] = s->array[end];}s->array[0] = x;s->size++;}//头删void PopFront(SeqList* s){assert(s);if (s->size = ""){printf("SeqLsit is kong");}for (int start = 0; start < s->size; ++start){s->array[start] = s->array[start + 1];}s->size--;}//指定位置插入void Insert(SeqList* s, size_t pos, DataType x){assert(s);if (s->size == N){printf("arrar is full");}for (size_t end = s->size; end >= pos; --end){s->array[end + 1] = s->array[end];}s->array[pos] = x;s->size++;}//指定位置删除void Erase(SeqList* s, size_t pos){assert(s);if (s->size == 0){printf("array is kong");}for (int mid = pos; mid < s->size; ++mid){s->array[mid] = s->array[mid + 1];}s->size--;}//查找数据int Find(SeqList* s, DataType x){assert(s);if (s->size == 0){printf("array is kong");}for (int start = 0; start < s->size; ++start){if (s->array[start] == x){return start;}}return 0;}//修改指定位置void Modify(SeqList* s, size_t pos, DataType x){assert(s);if (s->size == 0){printf("array is kong");}s->array[pos] = x;}//删除int Remove(SeqList* s, DataType x){assert(s);if (s->size == 0){printf("array is kong");}int rel = Find(s, x);if (rel != 0){Erase(s, rel);return 0;}else{return -1;}/*if (rel == 0){return 0;}if (rel != 0){for (int pos = rel; pos < s->size; ++pos){s->array[pos] = s->array[pos + 1];}return 1;}s->size--;*/}//删除所有数据int RemoveAll(SeqList* s, DataType x){int ret;assert(s);ret = Remove(s, x);while (ret == 0 && Rem4000ove(s, x) == 0){;}return ret;}void Swap(DataType* left, DataType* right){DataType temp = *left;*left = *right;*right = temp;}//顺序表冒泡排序void BubbleSort(SeqList* s){int start = 0;int end = 0;assert(s);for (end = s->size; end > 0; --end){int i = 0;while (start+1 < end ){Swap(s->array + start, s->array + start + 1);i = 1;}++start;}}//顺序表选择排序void SelectSort(SeqList* s){size_t start = 0;assert(s);for (; start < s->size; ++start){size_t i = start;size_t min = start;for (; i < s->size; ++i){if (s->array[min]>s->array[i]){min = i;}}Swap(s->array + start, s->array + min);}}//选择排序从头从尾向中间走void SelectSort_OP(SeqList* s){size_t start = 0;size_t finish = s->size - 1;assert(s);while (start < finish){size_t i = start;size_t min = start;size_t max = start;while (i <= finish){if (s->array[i] < s->array[min]){min = i;}if (s->array[i]>s->array[max]){max = i;++i;}Swap(s->array + start, s->array + min);if (start == max){max = min;}Swap(s->array + finish, s->array + max);start++;finish--;}}}//二分查找int BinarySearch(SeqList* s, DataType x){//size_t pos = (s -> size) / 2;int left = 0;int right = s->size;assert(s);if (s->size == 0){printf("array is kong");}while (left <= right){size_t pos = (left + right) / 2;if (x == s->array[pos]){return pos;}else if (x < s->array[pos]){right = pos - 1;}else if (x>s->array[pos]){left = pos + 1;}}return 0;}void TestSeqlist(){SeqList s;InitSeqList(&s);PushBack(&s, 1);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PushBack(&s, 5);PushBack(&s, 6);PrintSeqlist(&s);int pos = BinarySearch(&s, 2);//Remove(&s, 3);//int pos = Find(&s, 2);printf("%d\n", pos);//PushFront(&s, 0);//Insert(&s, 2, 9);//PrintSeqlist(&s);}
相关文章推荐
- C++实现静态顺序表的增删查改以及初始化
- C实现静态顺序表(增删查改基本函数+选择排序+冒泡排序+二分查找)
- C++实现静态顺序表的增删查改以及初始化
- C语言实现顺序表的增删查改以及排序
- 数据结构之静态顺序表(增删查改以及一些排序)
- 数据结构中静态顺序表的实现和增删查改。。。
- C语言实现静态顺序表的功能(增,删,查,改,以及排序)
- C++实现静态顺序表的增删查改
- C语言实现顺序表的增删查改以及排序
- 静态顺序表的实现及相关操作源代码(插入,删除,排序,逆置,超详细)
- 静态和动态顺序表的实现(c语言)
- 《面向对象程序设计与VC++实现》--liwei_2_2(以递增顺序对数组排序)
- ASP.NET实现增删改查等功能(Access版)系统之三-分页及排序
- C语言实现双向链表,增删改查,排序
- 静态顺序表------C语言实现
- (10.15)静态实现顺序栈的基本操…
- java中实现HashMap中的按照key的字典顺序排序输出
- 顺序表静态与动态实现及基本的操作(增删查改等)
- 静态顺序表-c语言实现
- ArrayList和LinkedList都是实现了List接口的类,他们都是元素的容器,用于存放对象的引用; 他们都可以对存放的元素进行增删改查的操作,还可以进行排序。 但是,他们还是有区别的。