最全顺序表函数(打印,初始化,后插,后删,前插,前删……)
来源:互联网 发布:ios软件助手 编辑:程序博客网 时间:2024/06/14 00:38
最全顺序表函数(打印,初始化,后插,后删,前插,前删,在某位中插入,从某位向后寻找,删除某位,删除某元素,删除表中全部某元素,冒泡排序,选择排序,二分查找)
//**************fun.h*******************#pragma once#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define MAX_SIZE 5typedef int Data_Type;typedef struct SeqList{ Data_Type array[MAX_SIZE]; size_t size;}SeqL, *Seqlist;void PrintSeqList(Seqlist pSeq);//输出表void InitSeqList(Seqlist pSeq);//初始化表void PushBack(Seqlist pSeq, const Data_Type x);//后插void PopBack(Seqlist pSeq);//后删void PushFront(Seqlist pSeq, const Data_Type x);//前插void PopFront(Seqlist pSeq);//前删void Insert(Seqlist pSeq, const size_t pos, const Data_Type x);//在 pos 位置插入元素xsize_t Find(Seqlist pSeq, const size_t pos, const Data_Type x);//在 pos 位置向后找元素xvoid Erase(Seqlist pSeq, const size_t pos);//删除 pos 位置元素void Remove(Seqlist pSeq, const Data_Type x);//删除 元素xvoid RemoveAll(Seqlist pSeq, const Data_Type x);//删除表中全部元素xvoid BubbleSort(Seqlist pSeq);//冒泡排序void SeclectSort(Seqlist pSeq);//选择排序 //一次选出最大最小的数据分别放在两端int BinarySearch(Seqlist pSeq, const Data_Type x);//二分查找 //************fun.c***************************#include"fun.h"void PrintSeqList(Seqlist pSeq)//输出表{ assert(pSeq); if (pSeq->size <= 0) { printf("Seqlist if empty\n"); return; } size_t begin = 0; for (; begin < pSeq->size; begin++) { printf("%d ", pSeq->array[begin]); } printf("\n");}void InitSeqList(Seqlist pSeq)//初始化表{ assert(pSeq); memset(pSeq, 0, sizeof(Data_Type)*MAX_SIZE); pSeq->size = 0;}void PushBack(Seqlist pSeq, const Data_Type x)//后插{ assert(pSeq); if (pSeq->size >= MAX_SIZE) { printf("Seqlist is full\n"); return; } pSeq->array[pSeq->size] = x; pSeq->size++;}void PopBack(Seqlist pSeq) //后删{ assert(pSeq); if (pSeq->size <= 0) { printf("Seqlist if empty\n"); return; } pSeq->array[pSeq->size - 1] = 0; --pSeq->size;}void PushFront(Seqlist pSeq, const Data_Type x)//前插{ assert(pSeq); if (pSeq->size >= MAX_SIZE) { printf("Seqlist is full\n"); return; } size_t begin = pSeq->size; for (; begin > 0; begin--) pSeq->array[begin] = pSeq->array[begin - 1]; pSeq->array[0] = x; pSeq->size++;}void PopFront(Seqlist pSeq)//前删{ assert(pSeq); if (pSeq->size <= 0) { printf("Seqlist is empty\n"); return; } size_t begin = 0; if (pSeq->size <= 0) { printf("Seqlist is empty\n"); return; } for (begin = 0; begin < pSeq->size - 1; begin++) pSeq->array[begin] = pSeq->array[begin + 1]; --pSeq->size;}void Insert(Seqlist pSeq, const size_t pos, const Data_Type x)//在 pos 位置插入元素x{ assert(pSeq); assert(pos <= pSeq->size); if (pos == MAX_SIZE) { printf("Seqlist is full\n"); return; } size_t begin = pSeq->size; for (; begin>pos; begin--) pSeq->array[begin] = pSeq->array[begin - 1]; pSeq->array[pos] = x; pSeq->size++;}size_t Find(Seqlist pSeq, const size_t pos, const Data_Type x)//在 pos 位置向后找元素x{ assert(pSeq); assert(pos < pSeq->size); size_t begin = pos; for (; begin < pSeq->size; begin++) if (pSeq->array[begin] == x) return begin; return -1;}void Erase(Seqlist pSeq, const size_t pos)//删除 pos 位置元素{ assert(pSeq); assert(pos < pSeq->size); size_t begin = pos; for (; begin < pSeq->size - 1; begin++) pSeq->array[begin] = pSeq->array[begin + 1]; pSeq->size--;}void Remove(Seqlist pSeq, const Data_Type x)//删除 元素x{ assert(pSeq); size_t begin = 0, i = 0; for (; begin < pSeq->size - 1; begin++) if (pSeq->array[begin] == x) { for (i = begin; i < pSeq->size - 1; i++) pSeq->array[i] = pSeq->array[i + 1]; pSeq->size--; printf("Remove %d success\n", x); return; } printf("Remove %d fail\n", x); return;}void RemoveAll(Seqlist pSeq, const Data_Type x)//删除表中全部元素x{ assert(pSeq); size_t begin = 0; size_t count = 0; for (begin = 0; begin < pSeq->size; begin++) { if (x == pSeq->array[begin]) count++; else pSeq->array[begin - count] = pSeq->array[begin]; } pSeq->size = pSeq->size - count;}void BubbleSort(Seqlist pSeq)//冒泡排序{ assert(pSeq); size_t i = 0, j = 0; int flag = -1; size_t begin = 0; Data_Type tmp; for (i = 0; i < pSeq->size - 1; i++) { flag = -1; for (begin = 0; begin < pSeq->size - i; begin++) if (pSeq->array[begin] > pSeq->array[begin + 1]) { tmp = pSeq->array[begin]; pSeq->array[begin] = pSeq->array[begin + 1]; pSeq->array[begin + 1] = tmp; flag = 1; } if (flag == -1) return; }}void SeclectSort(Seqlist pSeq)//选择排序{ //一次选出最大最小的数据分别放在两端 assert(pSeq); size_t i = 0, min = 0, max = 0, begin = 0; size_t flag_min = 0, flag_max = 0; Data_Type tmp = pSeq->array[0]; for (begin = 0; begin < pSeq->size; begin++) { flag_min = begin; flag_max = pSeq->size - begin - 1; min = flag_min; max = flag_max; for (i = begin; i < pSeq->size - begin; i++) { if (pSeq->array[flag_min]>pSeq->array[i]) min = i; if (pSeq->array[flag_max] < pSeq->array[i]) max = i; } tmp = pSeq->array[min]; pSeq->array[min] = pSeq->array[flag_min]; pSeq->array[flag_min] = tmp; tmp = pSeq->array[flag_max]; pSeq->array[flag_max] = pSeq->array[max]; pSeq->array[max] = tmp; }}int BinarySearch(Seqlist pSeq, const Data_Type x)//二分查找{ assert(pSeq); size_t left = 0, right = pSeq->size - 1; size_t begin = 0, mid = 0; while (left <= right) { mid = left + (right - left) / 2; if (pSeq->array[mid] == x) return mid; else if (pSeq->array[mid] > x) right = mid - 1; else left = mid + 1; } return -1;}//****************test.c*****************#include"fun.h"//测试函数 Test1~5()void Test1() //后插后删{ SeqL Seq; InitSeqList(&Seq); PushBack(&Seq, 1); PushBack(&Seq, 2); PushBack(&Seq, 3); PushBack(&Seq, 4); PushBack(&Seq, 5); PrintSeqList(&Seq); PushBack(&Seq, 6); PrintSeqList(&Seq); PopBack(&Seq); PopBack(&Seq); PopBack(&Seq); PopBack(&Seq); PrintSeqList(&Seq); PopBack(&Seq); PrintSeqList(&Seq); PopBack(&Seq); PrintSeqList(&Seq);}void Test2() //前插前删{ SeqL Seq; InitSeqList(&Seq); PushFront(&Seq, 1); PushFront(&Seq, 2); PushFront(&Seq, 3); PushFront(&Seq, 4); PushFront(&Seq, 5); PrintSeqList(&Seq); PushFront(&Seq, 6); PrintSeqList(&Seq); PopFront(&Seq); PrintSeqList(&Seq); PopFront(&Seq); PopFront(&Seq); PrintSeqList(&Seq); PopFront(&Seq); PopFront(&Seq); PopFront(&Seq); PopFront(&Seq);}void Test3() //Insert{ SeqL Seq; InitSeqList(&Seq); PushFront(&Seq, 1); PushFront(&Seq, 2); PrintSeqList(&Seq); // Insert(&Seq, 3, 1); Insert(&Seq, 2, 1); PrintSeqList(&Seq); PushBack(&Seq, 2); PrintSeqList(&Seq); Insert(&Seq, 0, 4); PushBack(&Seq, 1); PrintSeqList(&Seq); Insert(&Seq, 5, 1); PrintSeqList(&Seq); printf("%d \n", Find(&Seq, 0, 1)); printf("%d \n", Find(&Seq, 4, 1)); printf("%d \n", Find(&Seq, 5, 1));}void Test4()//Erase\Remove\RemoveAll{ SeqL Seq; InitSeqList(&Seq); PushFront(&Seq, 1); PushFront(&Seq, 2); PushBack(&Seq, 3); PushBack(&Seq, 1); PushBack(&Seq, 2); PrintSeqList(&Seq); // Erase(&Seq, 3); Remove(&Seq, 2); PrintSeqList(&Seq); RemoveAll(&Seq, 1); PrintSeqList(&Seq); Remove(&Seq, 3); PrintSeqList(&Seq); Erase(&Seq, 0); PrintSeqList(&Seq); Erase(&Seq, 1);}void Test5() //BubbleSort\SeclectSort\BinarySearch{ SeqL Seq; InitSeqList(&Seq); PushFront(&Seq, 1); PushFront(&Seq, 2); PushBack(&Seq, 3); PushBack(&Seq, 4); PushBack(&Seq, 0); PrintSeqList(&Seq); /*BubbleSort(&Seq); PrintSeqList(&Seq);*/ SeclectSort(&Seq); PrintSeqList(&Seq); printf("%d\n", BinarySearch(&Seq, 1)); printf("%d\n", BinarySearch(&Seq, 3)); printf("%d\n", BinarySearch(&Seq, 5));}int main(){ //Test1();//后插后删 //Test2();//前插前删 //Test3();//Insert\Find //Test4();//Erase\Remove\RemoveAll Test5();//BubbleSort\SeclectSort\BinarySearch system("pause"); return 0;}
0 0
- 最全顺序表函数(打印,初始化,后插,后删,前插,前删……)
- 数据结构 单链表实现前插、后插、前删、后删、显示、查找等等
- c++实现单链表(构造函数 拷贝函数 前插 后插 运算符重载 冒泡排序以及逆置)
- 带表头节点的循环双向链表(头插,尾插,中间插,清除,前向显示,后向显示)
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- 结点前插
- 数据结构中静态顺序表的初始化、尾插、尾删、头插、头删、任意位置的插入及删除
- 双向链表(前插操作,删除操作)
- 双向链表图解(前插操作,删除操作)
- c语言:【顺序表】静态顺序表的初始化、打印、尾插、尾删
- C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack
- 链表前插,后插,中间插,删除
- 【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)
- 出师表(前、后)
- 前++ 后++
- [数据结构]双向链表的前插操作
- 图的前插表示法(基于数组实现)
- 2007.08.22双向链表(前插操作,删除操作)
- 笔试面试成对出现的一组数,只有一个或两个只出现一次的数字,找到它们。
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 通讯录小程序(C/C++)C语言练习小程序
- uva 129 Krypton Factor
- 最全顺序表函数(打印,初始化,后插,后删,前插,前删……)
- #pragma once和#ifndef的区别
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)
- C/C++,数据结构单链表(采用C++"引用"方法)(寻找节点、在某处插入结点、删除某位置结点)
- PCA学习
- 遗传算法与TSP问题的MATLAB实现
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点