实现尾部插入、尾部删除、头部插入、头部删除、任意位置插入、任意位置删除、排序、查找、反转等功能
#ifndef __SEQ_TABLE_S_H__ #define __SEQ_TABLE_S_H__ #define MAX 100 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<assert.h> typedef int DataType; //创建结构体类型对象 typedef struct SeqList { DataType arr[MAX]; int size ; }SeqList,*pSeqList; void InitSeqList(pSeqList pSeq);//初始化 void PrintSeqList(SeqList Seq);//打印 void PushBack(pSeqList pSeq,DataType x);//尾插 void PopBack(pSeqList pSeq);//尾删 void PushFront(pSeqList pSeq, DataType x);//头插 void PopFront(pSeqList pSeq);//头删 void Insert(pSeqList pSeq, int pos, DataType x);//插入元素 void Remove(pSeqList pSeq, DataType x);//删除元素 void RemoveAll(pSeqList pSeq, DataType x);//删除所有指定元素 int Find(SeqList Seq,DataType x);//遍历查找 void ReverseList(pSeqList pSeq);//反转 void SortList(pSeqList pSeq);//排序 int BinarySearch(SeqList Seq,DataType x);//二分查找 void InitSeqList(pSeqList pSeq) { assert(pSeq); memset(pSeq->arr, 0, sizeof(pSeq->arr));//设置为全零 pSeq->size = 0; } void PrintSeqList(SeqList Seq) { int i = 0; for (i = 0; i < Seq.size; i++) { printf("%d ", Seq.arr[i]); } printf("over\n"); } void PushBack(pSeqList pSeq, DataType x)//尾插 { assert(pSeq); if (pSeq->size >= MAX) { printf("顺序表已满\n"); return; } // pSeq->arr[pSeq->size] = x; // pSeq->size++; pSeq->arr[pSeq->size++]=x; } void PopBack(pSeqList pSeq)//尾删 { assert(pSeq); if (pSeq->size == 0) { printf("顺序表已空\n"); return; } pSeq->size--; } void PushFront(pSeqList pSeq, DataType x)//头插 { assert(pSeq); int i = 0; if (pSeq->size >= MAX) { printf("顺序表已满\n"); return; } for (i = pSeq->size; i > 0; i--) { pSeq->arr[i] = pSeq->arr[i - 1]; } pSeq->arr[0] = x; pSeq->size++; } void PopFront(pSeqList pSeq)//头删 { assert(pSeq); int i = 0; if (pSeq->size == 0) { printf("顺序表已空\n"); return; } for (i = 0; i < pSeq->size; i++) { pSeq->arr[i] = pSeq->arr[i + 1]; } pSeq->size--; } void Insert(pSeqList pSeq, int pos, DataType x)//插入元素 { int i = 0; assert(pSeq); assert((pos < pSeq->size) && (pos >= 0)); if (pSeq->size == MAX) { printf("顺序表已满\n"); return; } for (i = pSeq->size; i>pos; i--) { pSeq->arr[i] = pSeq->arr[i - 1]; } pSeq->arr[pos] = x; pSeq->size++; } int Find(SeqList Seq, DataType x) { int i = 0; for (i = 0; i < Seq.size; i++) { if (x == Seq.arr[i]) { return i; } } return -1; } void Remove(pSeqList pSeq, DataType x)//删除元素 { int pos = Find(*pSeq, x); int i = 0; assert(pSeq); if (pos != -1) { for (i = pos; i < pSeq->size; i++) { pSeq->arr[i] = pSeq ->arr[i + 1]; } pSeq->size--; } } void RemoveAll(pSeqList pSeq, DataType x)//删除所有指定元素 { while (Find(*pSeq, x) != -1) { Remove(pSeq, x); } } void ReverseList(pSeqList pSeq)//反转 { int start = 0; int end = pSeq->size - 1; assert(pSeq); while (start < end) { DataType tmp = pSeq->arr[start]; pSeq->arr[start] = pSeq->arr[end]; pSeq->arr[end] = tmp; start++; end--; } } void SortList(pSeqList pSeq)//排序 { assert(pSeq); int i = 0; int j = 0; for (i = 0; i < pSeq->size-1; i++) { for (j = 0; j < pSeq->size - i - 1; j++) { if (pSeq->arr[j]>pSeq->arr[j + 1]) { DataType tmp = pSeq->arr[j]; pSeq->arr[j] = pSeq->arr[j + 1]; pSeq->arr[j + 1] = tmp; } } } } int BinarySearch(SeqList Seq, DataType x)//二分查找 { int left = 0; int right = Seq.size - 1; while (left <= right) { int mid = left - ((left - right) >> 1); if (Seq.arr[mid] > x) right = mid - 1; else if (Seq.arr[mid] == x) return mid; else left = mid + 1; } return -1; } #endif//__SEQ_TABLE_S_H__
时间: 2024-10-22 23:43:14