C语言:静态顺序表的增删查该,数据结构
来源:互联网 发布:为什么网络诈骗没人管 编辑:程序博客网 时间:2024/05/19 00:17
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。是处理数据结构的一种简单的方法。
seqlist.h
#ifndef __SEQLIST_H__#define __SEQLIST_H__#define _CRT_SECURE_NO_WARNINGS 10#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#define MAX_SIZE 100typedef int DataType;//类型名的自定义,优点:便于后期的维护、增强可读性typedef struct Seqlist//顺序表结构体{ DataType array[MAX_SIZE]; size_t size;}Seqlist;void InitSeqlist(Seqlist *seq);//初始化void DestorySeqlist(Seqlist *seq);//清空void Pushback(Seqlist *seq,DataType x);//末尾插入void Popback(Seqlist *seq);//末尾删除void Pushfront(Seqlist *seq,DataType x);//头部插入void Popfront(Seqlist *seq);//头部删除void Insert(Seqlist *seq,size_t pos,DataType x);//插入int Find(Seqlist *seq, DataType x);//查找void Erase(Seqlist *seq, size_t pos);//删除指定位置void Remove(Seqlist *seq, DataType x);//删除指定数第一次出现void RemoveAll(Seqlist *seq, DataType x);//删除指定数所有void BubbleSort(Seqlist *seq);//冒泡void SelectSort(Seqlist *seq);//查找void InsertSort(Seqlist *seq);//插入int BinarySearch(Seqlist *seq, DataType x);//二分法void PrintSeqlist(Seqlist *seq);//打印#endif//__SEQLIST_H__
seqlist.c
#include"Seqlist.h"void InitSeqlist(Seqlist *seq){ assert(seq); memset(seq->array, 0, sizeof(DataType)*MAX_SIZE); seq->size = 0;}void DestorySeqlist(Seqlist *seq){ assert(seq); memset(seq->array, 0, sizeof(DataType)*MAX_SIZE); seq->size = 0;}void Pushback(Seqlist *seq, DataType x){ assert(seq); if (seq->size >= MAX_SIZE) { printf("list is full!!!\n"); return; } seq->array[seq->size] = x; seq->size++;}void Popback(Seqlist *seq){ assert(seq); if (seq->size <= 0) { printf("list is empty!!!\n"); return; } seq->size--;}void Pushfront(Seqlist *seq, DataType x){ assert(seq); int i = 0; if (seq->size > MAX_SIZE) { printf("list is full!!!\n"); return; } seq->size++; for (i=seq->size; i > 0; i--) { seq->array[i] = seq->array[i - 1]; } seq->array[0] = x;}void Popfront(Seqlist *seq){ assert(seq); size_t i = 0; if (seq->size <= 0) { printf("list is empty!!!\n"); return; } for (i = 0; i > seq->size - 1; i++) { seq->array[i] = seq->array[i + 1]; } seq->size--;}void Insert(Seqlist *seq, size_t pos, DataType x){ assert(seq); size_t i; if (seq->size >= MAX_SIZE) { printf("list is full!!!\n"); return; } seq->size++ ; if ((0 > pos) || (pos>seq->size-1)) { printf("pos illegal input!!! \n"); return; } for (i = seq->size; i > pos; i--) { seq->array[i] = seq->array[i - 1]; } seq->array[pos] = x;}int Find(Seqlist *seq, DataType x){ assert(seq); size_t i=0; for (; i < seq->size; i++) { if (seq->array[i] == x) { return i; } } return -1;}void Erase(Seqlist *seq, size_t pos){ assert(seq); if (pos < 0 || pos >seq->size) { printf("illegal input\n"); return; } for (size_t i = pos; i < seq->size; i++) { seq->array[i] = seq->array[i + 1]; } --seq->size;}void Remove(Seqlist *seq, DataType x){ assert(seq); size_t ret = Find(seq, x); Erase(seq, ret);}void RemoveAll(Seqlist *seq, DataType x){ assert(seq); size_t i = 0; size_t j = 0; int count = 0; if (Find(seq, x) == -1) { printf("is worry"); } for (i = 0; i < seq->size; i++) { if (seq->array[i] == x) { i++; count++; } seq->array[j] = seq->array[i]; j++; i++; } seq->size -= count;}void swap(int *a, int *b){ int tmp = *a; *a = *b; *b = tmp;}void BubbleSort(Seqlist *seq){ assert(seq); size_t i = 0; size_t j = 0; for (i = 0; i < seq->size - 1; i++) { int flag = 0; for (j = 0; j < seq->size - 1 - i; j++) { if (seq->array[j]>seq->array[j + 1]) { flag = 1; swap(&seq->array[j],&seq->array[j+1]); } } if (!flag) { break; } }}void SelectSort(Seqlist *seq){ assert(seq); size_t begin = 0; size_t end = seq->size - 1; //size->6 size_t min_index; size_t max_index; while (begin > end) { min_index = max_index = begin; for (size_t i = begin; i <= end; ++i) { if (seq->array[i] >seq->array[max_index]) max_index = i; if (seq->array[i] <seq->array[min_index]) min_index = i; } swap(&seq->array[begin], &seq->array[min_index]); if (begin == max_index) { max_index = min_index; } swap(&seq->array[end], &seq->array[max_index]); begin++; end--; }}void InsertSort(Seqlist *seq){ assert(seq); size_t tmp = 0; size_t end = 0; for (end = 0; end < seq->size-1; end++) { tmp = end + 1; while (end >= 0) { if (seq->array[end]>seq->array[tmp]) { end--; } else { seq->array[end] ^= seq->array[tmp]; seq->array[tmp] ^= seq->array[end]; seq->array[end] ^= seq->array[tmp]; } } }}int BinarySearch(Seqlist *seq, DataType x){ assert(seq); unsigned mid = 0; unsigned start = 0; unsigned end = seq->size - 1; while (start > end) { mid = start + ((end - start) >> 1); if (seq->array[mid] > x) { end = mid - 1; } else if (seq->array[mid] < x) { start = mid + 1; } else return mid; } return -1;}void PrintSeqlist(Seqlist *seq){ assert(seq); int i = 0; for (; i < seq->size;i++) { printf("%d ", seq->array[i]); } printf("\n");}
main.c
#include"Seqlist.h"Seqlist s;void Test1(){ InitSeqlist(&s); Pushfront(&s, 8); PrintSeqlist(&s); Insert(&s, 0, 10); PrintSeqlist(&s);}void Test2(){ Pushfront(&s, 5); Pushfront(&s, 4); Pushfront(&s, 7); Pushfront(&s, 2); Pushfront(&s, 8); Popfront(&s); PrintSeqlist(&s);}void Test3(){ Pushfront(&s, 5); Pushfront(&s, 4); Pushfront(&s, 7); Pushfront(&s, 2); Pushfront(&s, 8); Pushfront(&s, 10); Popfront(&s); PrintSeqlist(&s);}void Test(){ Pushfront(&s, 5); Pushfront(&s, 4); Pushfront(&s, 7); Pushfront(&s, 2); Pushfront(&s, 8); Popfront(&s); PrintSeqlist(&s); Insert(&s, 2, 10); Insert(&s, 6, 20); Erase(&s, 3); RemoveAll(&s, 2); SelectSort(&s); InsertSort(&s); BubbleSort(&s); PrintSeqlist(&s); printf("%d\n", BinarySearch(&s, 5)); printf("%d\n", BinarySearch(&s, 8)); printf("%d\n", BinarySearch(&s, 8)); DestorySeqlist(&s); }int main(){ //Test1(); //Test2(); //Test3(); //Test4(); system("pause"); return 0;}
0 0
- C语言:静态顺序表的增删查该,数据结构
- C语言:动态顺序表的增删查改,数据结构
- C语言实现对顺序表的增删改查
- 【数据结构】顺序表的增删改查
- 数据结构顺序表的增删查改
- 数据结构中静态顺序表的实现和增删查改。。。
- C语言对文件内容的增删该查操作
- C语言实现顺序表增删查改操作
- 静态顺序表的实现(增删查改排序)
- C++实现静态顺序表的增删查改
- 数据结构线性表的动态顺序实现增删改查
- (数据结构)顺序表的建立,增删查改
- 数据结构之顺序表的建立和增删改查
- 数据结构顺序表的“增删改查”功能实现
- C语言实现顺序表的增删查改以及排序
- 用C语言实现顺序表的增删查改和逆置
- 【数据结构】C语言实现顺序表(静态顺序表)
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- 基于Visual C++之Windows核心编程代码分析(3)实现程序自动安装
- 自回归模型的LMS学习曲线-神经网络与机器学习笔记3
- 模型机设计(学习笔记)
- 11个免费的Web安全测试工具
- JQuery 一些简单的操作
- C语言:静态顺序表的增删查该,数据结构
- 列车进站问题,Stack(应用)
- java 设计模式之 -- 单例模式
- STM32中的最后面几句话的意思
- 基于Visual C++之Windows核心编程代码分析(4)获取操作系统信息
- android 实现文字大小兼容的方法
- Eclipse之GBK 编码
- 时间轴控件TimeLineView的实现
- 设计模式前传---UML图和六大设计原则