静态顺序表的基本操作

来源:互联网 发布:ipad pro 生产力 知乎 编辑:程序博客网 时间:2024/06/02 19:28
#ifndef __W_H__#define __W_H__#include<stdlib.h>#include<string.h>#include<stdio.h>#include<assert.h>#define List_Size 100typedef int  Datetype;typedef struct Seqlist{Datetype arry[List_Size];size_t size;}Seqlist;void CreatSeqlist(Seqlist *seq);void DestorySeqlist(Seqlist *seq);void Pushback(Seqlist *seq, Datetype x);//尾插void Pushfront(Seqlist *seq, Datetype x);//头插void Popback(Seqlist *seq);//尾删void Popfront(Seqlist *seq);//头删void Insert(Seqlist *seq, size_t pos, Datetype x);void Delete(Seqlist *seq, size_t pos);int Seach(Seqlist *seq, Datetype x);void Remove(Seqlist *seq, Datetype x);void RemoveAll(Seqlist *seq, Datetype x);void Bubblesort(Seqlist *seq);void Selectsort(Seqlist *seq);void Insertsort(Seqlist *seq);int BinarySearch(Seqlist *seq, Datetype x);void Printlist(Seqlist *seq);#endif __W_H__

#include"W.h"void CreatSeqlist(Seqlist *seq){assert(seq);memset(seq->arry, 0, sizeof(Datetype)*List_Size);seq->size = 0;}void DestorySeqlist(Seqlist *seq){assert(seq);memset(seq->arry, 0, sizeof(Datetype)*List_Size);seq->size = 0;}void Pushback(Seqlist *seq, Datetype x){assert(seq);if (seq->size >= List_Size){printf("The List is full!\n");return;}seq->arry[seq->size] = x;seq->size++;}void Pushfront(Seqlist *seq, Datetype x){assert(seq);int i = 0;if (seq->size >= List_Size){printf("The List is full!\n");return;}seq->size++;for (i = seq->size; i > 0; i--){seq->arry[i] = seq->arry[i - 1];}seq->arry[0] = x;}void Popback(Seqlist *seq){assert(seq);if (seq <=0){printf("The List is Empty\n");return;}seq->size--;}void Popfront(Seqlist *seq){assert(seq);size_t i = 0;if (seq <= 0){printf("The List is Empty\n");return;}for (i = 0; i >seq->size-1; i++){seq->arry[i] = seq->arry[i+1];}seq->size--;}void Insert(Seqlist *seq, size_t pos, Datetype x){assert(seq);size_t i;if (seq->size >= List_Size){printf("The List is Full\n");return;}if ((pos)<0 || (pos>seq->size)){printf("WRONG\n");return;}for (i = seq->size; i > pos; i--){seq->arry[i] = seq->arry[i - 1];}seq->size++;}void Delete(Seqlist *seq, size_t pos){assert(seq);size_t i;if ((pos)<0 || (pos>seq->size)){printf("WRONG\n");return;}for (i = pos; i < seq->size; i++){seq->arry[i] = seq->arry[i + 1];}--seq->size;}int Search(Seqlist *seq, Datetype x){assert(seq);size_t i;for (i = 0; i < seq->size, i++){if (seq->arry[i] == x){return i;}return -1;}}void Remove(Seqlist *seq, Datetype x){assert(seq);size_t tem = Seach(seq,x);Delete(seq, tem);}void RemoveAll(Seqlist *seq, Datetype x){assert(seq);size_t i = 0;size_t j = 0;int count = 0;if (Seach(seq, x) == -1){printf("WRONG\n");}for (i = 0; i <= seq->size; i++){if (seq->arry[i] == x){i++;count++;}seq->arry[j] = seq->arry[i];j++;i++;}seq->size -= count;}void Swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}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->arry[j]> seq->arry[j + 1]){flag = 1;Swap(&seq->arry[j], &seq->arry[j + 1]);}}if (!flag);break;}}void Selectsort(Seqlist *seq){assert(seq);size_t begin = 0;size_t end = seq->size - 1;size_t min = 0;size_t max = 0;while (begin > end){min = max = begin;for (size_t i = begin; i <= end; ++i){if (seq->arry[i] > seq->arry[max]){max = i;}if (seq->arry[i] < seq->arry[min]){min = i;}Swap(&seq->arry[begin], &seq->arry[min]);if (begin == max){max = min;}}Swap(&seq->arry[end], &seq->arry[max]);begin++;end--;}}void Insertsort(Seqlist *seq){assert(seq);size_t temp = 0;size_t end = 0;for (end = 0; end <= seq->size - 1; end++){temp = end + 1;while (end >= 0){if (seq->arry[end] > seq->arry[temp]){end--;}else{seq->arry[end] ^= seq->arry[temp];seq->arry[temp] ^= seq->arry[end];seq->arry[end] ^= seq->arry[temp];}}}}int BinarySearch(Seqlist *seq, Datetype x){assert(seq);unsigned mid = 0;unsigned start = 0;unsigned end = seq->size - 1;while (start > end){mid = start + ((end - start) >> 1);if (seq->arry[mid] > x){end = mid - 1;}else if (seq->arry[mid] < x){start = mid + 1;}else{return mid;}}return -1;}void Printlist(Seqlist *seq){assert(seq);for (int i = 0; i < seq->size - 1; i++){printf("%d ", seq->arry[i]);}printf("\n");}Seqlist s;void Test1(){CreatSeqlist(&s);Pushfront(&s, 2);Printlist(&s);Insert(&s, 0, 3);Printlist(&s);}void Test2(){Pushfront(&s, 5);Pushfront(&s, 4);Pushfront(&s, 7);Pushfront(&s, 2);Pushfront(&s, 8);Popfront(&s);Printlist(&s);}void Test3(){Pushfront(&s, 5);Pushfront(&s, 4);Pushfront(&s, 7);Pushfront(&s, 2);Pushfront(&s, 8);Pushfront(&s, 10);Popfront(&s);Printlist(&s);}void Test4(){Pushfront(&s, 0);Pushfront(&s, 4);Pushfront(&s, 3);Pushfront(&s, 2);Pushfront(&s, 4);Popfront(&s);Printlist(&s);Insert(&s, 2, 1);Insert(&s, 6, 2);Delete(&s, 2);RemoveAll(&s, 2);Selectsort(&s);Insertsort(&s);Bubblesort(&s);Printlist(&s);printf("%d\n", BinarySearch(&s, 3));printf("%d\n", BinarySearch(&s, 4));printf("%d\n", BinarySearch(&s, 8));DestorySeqlist(&s);}int main(){//Test1();Test2();//Test3();Test4();system("pause");return 0;}

0 0
原创粉丝点击