顺序表
2016-02-18 16:44
309 查看
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<assert.h> #include<string.h> #define MAX_SIZE 5 typedef int DataType; typedef struct SeqList { DataType array[MAX_SIZE]; size_t size; } SeqList; 打印顺序表 void PrintfSeqList(SeqList* pSeq) { assert(pSeq); int i = 0; if (!pSeq->size) { return; } for (; i < pSeq->size ; i++) { printf("%d ", pSeq->array[i]); } } 2.初始化顺序表 void InitSeqList(SeqList* pSeq) { assert(pSeq); if (!pSeq->size) { return; } size_t ret = pSeq->size; memset(pSeq, 0, sizeof(SeqList)); pSeq->size = ret; } 3.尾插法 void PushBack(SeqList* pSeq, DataType x) { assert(pSeq); pSeq->array[pSeq->size ] = x; ++pSeq->size; } void PopBack(SeqList* pSeq) { assert(pSeq); if (pSeq->size == 0) { return; } --pSeq->size; } 4.头插法 void PushFront(SeqList* pSeq, DataType x) { int i = pSeq->size-1; assert(pSeq); if (pSeq->size == 0) { return; } for (; i >=0; i--) { pSeq->array[i + 1] = pSeq->array[i]; } pSeq->array[0] = x; ++pSeq->size; return; } 5.头出法 void PopFront(SeqList* pSeq) { int i = 1; assert(pSeq); if (pSeq->size == 0) { return; } for (; i < pSeq->size; i++) { pSeq->array[i - 1] = pSeq->array[i]; } --pSeq->size; return; } 6.在指定的位置插入某个数字 void Inser(SeqList* pSeq, size_t pos, DataType x) { assert(pSeq); int i = pSeq->size; if (pSeq->size == 0) { return; } for (; i >pos; i--) { pSeq->array[i] = pSeq->array[i - 1]; } pSeq->array[pos] = x; ++pSeq->size; } 7.在顺序表中寻找某个数字,若找到则返回该数字,否则返回-1 int Find(SeqList* pSeq, DataType x) { assert(pSeq); int i = 0; if (pSeq->size == 0) { return; } for (; i < pSeq->size; i++) { if (pSeq->array[i] == x) { return i; break; } } return -1; } 8.删除顺序表中某个位置的数据 void Erase(SeqList* pSeq, size_t pos) { assert(pSeq); int i = pos; if (pSeq->size == 0) { return; } for (; i<pSeq->size; i++) { pSeq->array[i-1] = pSeq->array[i]; } --pSeq->size; } 9.删除顺序表中某个数字 void Remove(SeqList* pSeq, DataType x) { assert(pSeq); int i = 0; if (pSeq->size == 0) { return; } for (; i < pSeq->size; i++) { if (pSeq->array[i] == x) { int j = 0; for (j = i; j < pSeq->size-1; j++) { pSeq->array[j] = pSeq->array[j + 1]; } } break; } --pSeq->size; } 10.删除顺序表中所有的数字 void _RemoveAll(SeqList* pSeq, DataType x) { assert(pSeq); int i = 0,count=0; if (pSeq->size == 0) { return; } for (; i < pSeq->size; i++) { if (pSeq->array[i] == x) { count++; } else { pSeq->array[i - count] = pSeq->array[i]; } } pSeq->size -= count; } 11.顺序表的冒泡排序 void BubbleSort(SeqList* pSeq) { assert(pSeq); int i = 0, j = 0; if (pSeq->size == 0) { return; } for (i = 0; i < pSeq->size; i++) { for (j = 0; j < pSeq->size - i - 1; j++) { if (pSeq->array[j]>pSeq->array[j + 1]) { int tmp = pSeq->array[j]; pSeq->array[j] = pSeq->array[j + 1]; pSeq->array[j + 1] = tmp; } } } } 12.顺序表的选择排序 void SeclectSort(SeqList* pSeq) { assert(pSeq); int i, j; if (pSeq->size == 0) { return; } for (i = 0; i < pSeq->size - 1; i++) { int num= 0; for (j = i + 1; j < pSeq->size; j++) { if (pSeq->array[j] < pSeq->array[num]) { num = j; } } int tmp = pSeq->array[num]; pSeq->array[num] = pSeq->array[i]; pSeq->array[i] = tmp; } } 13.在顺序表中进行二分搜索 int BinarySearch(SeqList* pSeq, DataType x) { assert(pSeq); int left = 0; int right = pSeq->size-1; while (left <= right) { int mid = left - (left - right) / 2; if (pSeq->array[mid] < x) { left = mid + 1; } else if (pSeq->array[mid] > x) { right = mid-1; } else return mid; } return -1; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#数据结构之顺序表(SeqList)实例详解
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C语言实现顺序表基本操作汇总