动态实现顺序表
2016-06-03 00:31
190 查看
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
下面来进行顺序表的动态实现
头文件
函数实现部分
测试代码
测试部分读者有兴趣可以自行添加测试
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
下面来进行顺序表的动态实现
头文件
#ifndef __SEQLIST_D_H__ #define __SEQLIST_D_H__ #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #define MAX 1000 #define DEFAULT_SIZE 3 typedef int DataType; typedef struct SeqList { DataType* data; int size; int capacity; }SeqList,*pSeqList; void PrintSeqList(pSeqList pSeq);//打印函数 void DestroySeqList(pSeqList pSeq);//销毁函数 void InitSeqList(pSeqList pSeq);//初始化函数 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);//删除所有 void Bubblesort(pSeqList pSeq);//冒泡排序 void Erase(pSeqList pSeq,int pos);//指定为删除 int BinarySearch(pSeqList pSeq,DataType x);//二分查找法 #endif//__SEQLIST_D_H__
函数实现部分
#include"SeqList_D.h" void PrintSeqList(pSeqList pSeq) { assert(pSeq); DataType i=0; for(i=0;i<pSeq->size;i++) { printf("%3d",pSeq->data[i]); } printf("\n"); } void InitSeqList(pSeqList pSeq) { assert(pSeq); pSeq->data =(DataType*)malloc(pSeq->capacity *sizeof(DataType)); if(pSeq->data ==NULL) { memset(pSeq->data ,0,pSeq->capacity *sizeof(DataType)); exit(EXIT_FAILURE); } pSeq->size =0; pSeq->capacity=DEFAULT_SIZE; } void DestroySeqList(pSeqList pSeq) { free(pSeq->data ); pSeq->data =NULL; pSeq->capacity=0; pSeq->size=0; } void capacity(pSeqList pSeq)//扩容函数 { assert(pSeq); if(pSeq->size == pSeq->capacity) { DataType *tmp=(DataType *)realloc(pSeq->data,(pSeq->capacity+=DEFAULT_SIZE)*sizeof(DataType)); if(tmp == NULL) { printf("out of memory\n"); exit(EXIT_FAILURE); } else { pSeq->data=tmp; pSeq->capacity+=DEFAULT_SIZE; } } } void PushBack(pSeqList pSeq,DataType x) { assert(pSeq); capacity(pSeq); if (pSeq->size == pSeq->capacity) { return; } pSeq->data[pSeq->size++] = x; } void PopBack(pSeqList pSeq) { assert(pSeq); if (pSeq->size == 0) { return; } pSeq->size--; } void PushFront(pSeqList pSeq,DataType x) { assert(pSeq); capacity(pSeq); int i = 0; for (i = (pSeq->size); i >= 0; i--) { pSeq->data[i] = pSeq->data[i-1]; } pSeq->data[0] = x; pSeq->size++; } void PopFront(pSeqList pSeq) { int i=0; assert(pSeq); if(pSeq->size==0) { return ; } for(i=0;i<pSeq->size-1;i++) { pSeq->data[i]=pSeq->data[i+1]; } pSeq->size--; } void Insert(pSeqList pSeq,int pos,DataType x) { int i=0; assert(pSeq); capacity(pSeq); if(pos<1) { return ; } for(i=(pSeq->size)-1;i>=pos-1;i--) { pSeq->data[i+1]=pSeq->data[i]; } pSeq->data[pos - 1] = x; pSeq->size++; } void Remove(pSeqList pSeq,DataType x) { int i=0,j=0; assert(pSeq); if(pSeq->size==0) { return; } if(pSeq->data[i]==x) { for(i=0;i<pSeq->size;i++) { pSeq->data[j]=pSeq->data[j+1]; } pSeq->size--; } } void RemoveAll(pSeqList pSeq,DataType x) { int i=0,j=0; assert(pSeq); for(i=0;i<pSeq->size;i++) { if(pSeq->data[i]=x) { for(j=i;j<pSeq->size-1;j++) { pSeq->data[j]=pSeq->data[j+1]; } pSeq->size--; } else i++; } } void Bubblesort(pSeqList pSeq) { assert(pSeq); int i = 0; int j = 0; for (i = 0; i < pSeq->size - 1; i++) { for (j = 0; j < pSeq->size - 1 - i; j++) { if (pSeq->data[j]>pSeq->data[j + 1]) { DataType temp = pSeq->data[j]; pSeq->data[j] = pSeq->data[j + 1]; pSeq->data[j + 1] = temp; } } } } void Erase(pSeqList pSeq,int pos) { int i=0; if(pos == -1) { printf("找不到要删除对象\n"); return; } for(i = pos; i < pSeq->size; i++) { pSeq->data[i] = pSeq->data[i+1]; } pSeq->size--; printf("删除成功\n"); } int BinarySearch(pSeqList pSeq,DataType x) { int mid = 0; int left = 0; int right = (pSeq->size) - 1; assert(pSeq); if (pSeq->size == 0) { return 0; } Bubblesort(pSeq); while (left <= right) { mid = (left + right) / 2; if (x > pSeq->data[mid]) { left = mid+1; } else if (x < pSeq->data[mid]) { right = mid-1; } else { return mid; } } return -1; }
测试代码
#include"SeqList_D.h" int main() { SeqList pSeq; InitSeqList(&pSeq); PushBack(&pSeq,1); PushBack(&pSeq,2); PushBack(&pSeq,3); PushBack(&pSeq,9); PushBack(&pSeq,5); PushBack(&pSeq,8); PushBack(&pSeq,7); PrintSeqList(&pSeq); Bubblesort(&pSeq); PopFront(&pSeq); PrintSeqList(&pSeq); Insert(&pSeq,3,10); PrintSeqList(&pSeq); Bubblesort(&pSeq); PrintSeqList(&pSeq); int ret = BinarySearch(&pSeq,5); printf("在第%d个位置\n", ret+1); system("pause"); return 0; }
测试部分读者有兴趣可以自行添加测试
相关文章推荐
- POJ 3278 Catch That Cow
- Apache Torque的使用
- 机器学习(二)--- SVM学习:理论基础理解
- Android SharedPreference
- Android关于buildToolVersion与CompileSdkVersion的区别
- HTML5.dcloud.io-stream-app
- 【51CTO学院三周年】通往牛逼的路上,在意的只有远方
- angular controller的一些用法
- Sicily 1334 数列
- [SM] 衣柜系统
- Java IO
- C++作业7
- Android 动态添加布局
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
- Ubuntu の MySQL 数据库服务配置和远程连接使用教程
- java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl
- Java RandomAccessFile
- 静态顺序表
- Win10系统开启IIS服务步骤
- React入门笔记(二) — 组件的生命周期