顺序表(静态)
来源:互联网 发布:手机hifi音效软件 编辑:程序博客网 时间:2024/06/08 18:57
SeqList.h
#ifndef _SEQLIST_H__#define _SEQLIST_H__#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>#include <assert.h>#define MAX 1000#define TYPES "%d"typedef int DataType;typedef struct Seqlist { DataType List[MAX]; int sz;}Seqlist, *pSeqlist;void InitSeqlist(pSeqlist p);//初始化void PushBack(pSeqlist p, DataType d);//尾插void PrintSeqlist(pSeqlist p);//打印void PopBack(pSeqlist p);//尾删void PushFront(pSeqlist p,DataType d);//头插void PopFront(pSeqlist p);//头删void Insert(pSeqlist p, int pos,DataType d);//指定位置插入int Find(pSeqlist p, DataType d);//遍历查找void Remove(pSeqlist p, DataType d);//删除void ReverseSeqlist(pSeqlist p);//逆序void SortSeqlist(pSeqlist p);//冒泡排序int BinarySearch(pSeqlist p, DataType d);//二分查找,返回ret为元素所在列表位置下标#endif //_SEQLIST_H__
SeqList.c
#include "SeqList.h"void InitSeqlist(pSeqlist p)//初始化{ assert(p); memset(p, 0, sizeof(Seqlist)); p->sz=0;}void PushBack(pSeqlist p, DataType d)//尾插{ assert(p); if(p->sz==MAX) { printf("列表以满\n"); return; } else { p->List[p->sz]=d; p->sz++; }}void PrintSeqlist(pSeqlist p)//打印{ int i=0; assert(p); if(p->sz==0) { printf("列表为空\n"); return ; } for (i=0; i<p->sz; i++) { printf(TYPES,p->List[i]); } printf("\n");}void PopBack(pSeqlist p)//尾删{ assert(p); //p->List[p->sz-1]=0; p->sz--;}void PushFront(pSeqlist p,DataType d)//头插{ int i=0; assert(p); for (i=p->sz; i>0; i--) { p->List[i]=p->List[i-1]; } p->List[0]=d; p->sz++;}void PopFront(pSeqlist p)//头删{ int i=0; assert(p); for(i=0; i<p->sz-1; i++) { p->List[i]=p->List[i+1]; } p->sz--;}void Insert(pSeqlist p, int pos,DataType d)//指定位置插入{ int i = 0; assert(p); for (i=p->sz; i>pos; i--) { p->List[i]=p->List[i-1]; } p->List[pos]=d; p->sz++;}int Find(pSeqlist p, DataType d)//遍历查找{ int i = 0; assert(p); for (i=0; i<p->sz; i++) { if(p->List[i]==d) { return i; } } if(i==p->sz) { printf("没找着\n"); } return -1;}void Remove(pSeqlist p, DataType d)//删除{ int ret=Find(p, d); assert(p); if(ret==-1) { printf("没有此元素\n"); } else { int i = 0; for(i=ret; i<p->sz-1; i++) { p->List[i]=p->List[i+1]; } p->sz--; }}void ReverseSeqlist(pSeqlist p)//逆序{ int left=0; int right=p->sz-1; assert(p); while (left<right) { DataType tmp = p->List[left]; p->List[left] = p->List[right]; p->List[right] = tmp; left++; right--; }}void SortSeqlist(pSeqlist p)//冒泡排序{ int i=0; assert(p); for (i=0; i<p->sz-1; i++) { int j=0; for (j=0; j<p->sz-i-1; j++) { if(p->List[j]>p->List[j+1]) { DataType tmp = p->List[j]; p->List[j] = p->List[j+1]; p->List[j+1] = tmp; } } }}int BinarySearch(pSeqlist p, DataType d)//二分查找,默认顺序从小到大{ int left=0; int right=p->sz-1; assert(p); while (left<=right) { int mid = left+(right-left)/2; if(p->List[mid]>d) { right=mid; } else if(p->List[mid]<d) { left=mid; } else { return mid; } } return -1;}
test.c
#include "SeqList.h"void test1(){ Seqlist seqlist; int ret = 0; InitSeqlist(&seqlist);//初始化 PushBack(&seqlist, 1);//尾插 PushBack(&seqlist, 2); PushBack(&seqlist, 3); PushBack(&seqlist, 4); printf("尾插1、2、3、4:"); PrintSeqlist(&seqlist);//打印 PopBack(&seqlist);//尾删 PopBack(&seqlist); printf("尾删:"); PrintSeqlist(&seqlist); PushFront(&seqlist, 0);//头插 printf("头插0:"); PrintSeqlist(&seqlist); PopFront(&seqlist);//头删 printf("头删:"); PrintSeqlist(&seqlist); Insert(&seqlist, 1, 5);//指定位置插入 printf("在1位置插入5:"); PrintSeqlist(&seqlist); ret = Find(&seqlist, 5); printf("ret = %d\n", ret); Remove(&seqlist, 5);//删除 printf("删除5这个元素:"); PrintSeqlist(&seqlist);}void test2(){ Seqlist seqlist; int ret = 0; InitSeqlist(&seqlist);//初始化 PushBack(&seqlist, 1);//尾插 PushBack(&seqlist, 2); PushBack(&seqlist, 3); PushBack(&seqlist, 4); PrintSeqlist(&seqlist); ReverseSeqlist(&seqlist);//逆序 printf("逆序:"); PrintSeqlist(&seqlist); SortSeqlist(&seqlist);//排序 printf("排序:"); PrintSeqlist(&seqlist); ret = BinarySearch(&seqlist, 2);//二分查找,返回ret为元素所在列表位置下标 printf("二分查找元素2:"); printf("ret = %d\n", ret);}int main(){ //test1(); test2(); return 0;}
运行结果
test1
test2
阅读全文
0 0
- 顺序表(静态)
- 顺序表(静态)
- 静态顺序表(2)
- 数据结构:静态查找表(顺序表)
- 顺序表(静态开辟内存)
- 静态顺序表(C语言实现)
- 静态顺序表(C语言实现)
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- 简易静态顺序表
- 静态顺序表
- 静态顺序表
- 静态顺序表
- uploadify火狐不能上传
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- Android如何使edittext默认失去焦点
- 逻辑回归(Logistic Regression)和SVM的联系以及Kernel
- JLpay
- 顺序表(静态)
- Sleep/join/yield方法
- How to Backup Linux? 15 rsync Command Examples
- 读写锁
- MFC基于对话框添加图片控件
- c 语言连等式
- android kotlin与Java互操作(二)Java 中调用 Kotlin
- enum的作用以及主要的作用
- Java求1-100之间的质数