顺序表(静态)

来源:互联网 发布:js 验证码倒计时 编辑:程序博客网 时间:2024/06/08 18:27

SeqList.h

#pragma once#include <stdio.h>#include <string.h>#include <assert.h>#define MAX 100typedef int DataType;typedef struct SeqList{DataType Data[MAX];int sz;}SeqList, *pSeqList;void InitSeqList(pSeqList ps);//初始化void PushBack(pSeqList ps, DataType d);//尾部插入void PopBack(pSeqList ps);//尾部删除void PushFront(pSeqList ps, DataType d);//头部插入void PopFront(pSeqList ps);//头部删除void Insert(pSeqList ps, int pos, DataType d);//指定位置插入int Find(pSeqList ps, DataType d);//查找void Remove(pSeqList ps, DataType d);//删除最先出现的指定元素void SortSeqList(pSeqList ps);//冒泡排序void ReverseSeqList(pSeqList ps);//逆序void BinarySearch(pSeqList ps, DataType d);//二分查找void PrintSeqList(const pSeqList ps);//打印

SeqList.c

#define _CRT_SECURE_NO_WARNINGS 1#include "SeqList.h"void InitSeqList(pSeqList ps)//初始化{memset(ps, 0, sizeof(ps->Data));ps->sz = 0;}void PushBack(pSeqList ps, DataType d)//尾部插入{if(ps->sz == MAX){printf("顺序表已满\n");return;}ps->Data[ps->sz] = d;ps->sz++;}void PopBack(pSeqList ps)//尾部删除{if(ps->sz == 0){printf("顺序表为空,无法删除\n");return;}ps->sz--;}void PushFront(pSeqList ps, DataType d)//头部插入{int i = 0;if(ps->sz == MAX){printf("顺序表已满\n");return;}for(i=ps->sz; i>0; i--){ps->Data[i] = ps->Data[i-1];}ps->Data[0] = d;ps->sz++;}void PopFront(pSeqList ps)//头部删除{int i = 0;for(i=0; i<ps->sz-1; i++){ps->Data[i] = ps->Data[i+1];}ps->sz--;}void Insert(pSeqList ps, int pos, DataType d)//指定位置插入{int i = 0;if(ps->sz == MAX){printf("顺序表已满\n");return;}for(i=ps->sz; i>pos; i--){ps->Data[i] = ps->Data[i-1];}ps->Data[pos] = d;ps->sz++;}int Find(pSeqList ps, DataType d)//查找{int i = 0;for(i=0; i<ps->sz; i++){if(ps->Data[i] == d){printf("Data[%d] = %d\n", i, d);return i;}}return -1;}void Remove(pSeqList ps, DataType d)//删除最先出现的指定元素{int ret = Find(ps, d);if(ret != -1){int i = 0;for(i=ret; i<ps->sz-1; i++){ps->Data[i] = ps->Data[i+1];}ps->sz--;}else{printf("无此元素\n");}}void SortSeqList(pSeqList ps)//冒泡排序{int i = 0;for(i=0; i<ps->sz; i++){int j = 0;DataType tmp = 0;for(j=0; j<ps->sz-i-1; j++){if(ps->Data[j] > ps->Data[j+1]){tmp = ps->Data[j];ps->Data[j] = ps->Data[j+1];ps->Data[j+1] = tmp;}}}}void ReverseSeqList(pSeqList ps)//逆序{int left = 0;int right = ps->sz-1;DataType tmp = 0;while(left<right){tmp = ps->Data[left];ps->Data[left] = ps->Data[right];ps->Data[right] = tmp;left++;right--;}}void BinarySearch(pSeqList ps, DataType d)//二分查找{int left = 0;int right = ps->sz-1;while(left <= right){int mid = left + (right-left)/2;if(d > ps->Data[mid]){left = mid + 1;}else if(d < ps->Data[mid]){right = mid -1;}else{printf("Data[%d] = %d\n", mid, d);return;}}if(left > right){printf("没找到\n");}}void PrintSeqList(const pSeqList ps)//打印{int i = 0;assert(ps);for(i=0; i<ps->sz; i++){printf("%d ", ps->Data[i]);}printf("\n");}

test.c

#include "SeqList.h"void test(){SeqList seqlist;InitSeqList(&seqlist);PushBack(&seqlist, 1);PushBack(&seqlist, 2);PushBack(&seqlist, 3);PopBack(&seqlist);PrintSeqList(&seqlist);PushFront(&seqlist, 0);PushFront(&seqlist, -1);PushFront(&seqlist, -2);PopFront(&seqlist);PrintSeqList(&seqlist);Insert(&seqlist, 2, 10);PrintSeqList(&seqlist);Find(&seqlist, 2);Remove(&seqlist, 10);PrintSeqList(&seqlist);ReverseSeqList(&seqlist);PrintSeqList(&seqlist);SortSeqList(&seqlist);PrintSeqList(&seqlist);BinarySearch(&seqlist, 2);PrintSeqList(&seqlist);}int main(){test();//测试代码return 0;}

原创粉丝点击