模拟实现顺序表
来源:互联网 发布:软件过期怎么修改 编辑:程序博客网 时间:2024/06/06 00:26
在数据结构中有一种存储方式是顺序表,一般表现为数组,使用一组地址连续的存储单元来依次存储数据。它的长度是固定的,在分配内存之前就已经定义了数组的长度。了解顺序表有数组的特性,就可以模拟实现一个静态顺序表。
先定义一个结构体,来存放顺序表
"Seqlist.h"
#ifndef __SEQLIST_H__#define __SEQLIST_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef int DataType;typedef struct SeqList{DataType data[MAX];int sz;}Seq,*pSeqList;void PrintSeqlist(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); //删除一个指定的x元素void RemoveAll(pSeqList pSeq,DataType x); //删除所有指定的x元素void Sort(pSeqList pSeq); //排序-冒泡排序int BinarySearch(pSeqList pSeq,DataType x); //查找某一个元素-二分查找#endif //__SEQLIST_H__
#define _CRT_SECURE_NO_WARNINGS#include"Seqlist.h"void PrintSeqlist(pSeqList pSeq) //输出{int i = 0;for(i=0; i<pSeq->sz; i++){printf("%d ",pSeq->data[i]);}printf("\n");}void InitSeqList(pSeqList pSeq) //初始化{pSeq->sz=0;memset(pSeq->data,0,sizeof(DataType)*MAX);}void PushBack(pSeqList pSeq,DataType x) //从后边添加{if(pSeq->sz == MAX){printf("顺序表已满!\n");return;}pSeq->data[pSeq->sz] = x;pSeq->sz++;}void PopBack(pSeqList pSeq) //从后边删除{if(pSeq->sz == 0){printf("顺序表已空!\n");return;}pSeq->sz--;}void PushFront(pSeqList pSeq,DataType x) //从前边添加{int i = 0;if(pSeq->sz == MAX){printf("顺序表已满!");}else{pSeq->sz++;}for(i=pSeq->sz; i>0; i--){pSeq->data[i] = pSeq->data[i-1];}pSeq->data[0] = x;}void PopFront(pSeqList pSeq) //从前边删除{int i = 0;if(pSeq->sz == 0){printf("顺序表已空!\n");}for(i=0; i<pSeq->sz; i++){pSeq->data[i] = pSeq->data[i+1];}pSeq->sz--;}void Insert(pSeqList pSeq,int pos,DataType x) //指定位置插入{int i = 0;if(pSeq->sz == MAX){printf("顺序表已满!\n");}else{pSeq->sz++;}for(i=pSeq->sz; i>pos; i--){pSeq->data[i] = pSeq->data[i-1];}pSeq->data[pos] = x;}void Remove(pSeqList pSeq,DataType x) //删除一个数据为x的元素{int i = 0;int j = 0;for(i=0; i<pSeq->sz-1; i++){if(x == pSeq->data[i]){for(j=i; j<pSeq->sz; j++){pSeq->data[j] = pSeq->data[j+1];}pSeq->sz--;return;}}}void RemoveAll(pSeqList pSeq,DataType x) //删除全部数据为x的元素{int i = 0;for(i=0; i<pSeq->sz; i++){Remove(pSeq,x);}}void Sort(pSeqList pSeq) //排序------冒泡排序{int i = 0;int j = 0;for(i=0; i<pSeq->sz-1; i++){for(j=0; j<pSeq->sz-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;}}}}int BinarySearch(pSeqList pSeq,DataType x) //二分查找{int left = 0;int right = pSeq->sz-1;printf("请输入要查找的数:");scanf("%d",&x);while(left < right){int mid = (left + right)/2;if(x < pSeq->data[mid]){right = mid-1;}else if(x > pSeq->data[mid]){left = mid+1;}else return mid;}return -1;}
测试模块:"test.c"
#define _CRT_SECURE_NO_WARNINGS#include"Seqlist.h"void test_PushBack(pSeqList pSeq,DataType x) //后添{PushBack(pSeq,21);PushBack(pSeq,5);PushBack(pSeq,4);PushBack(pSeq,12);PushBack(pSeq,5);PushBack(pSeq,6);PushBack(pSeq,5);PushBack(pSeq,7);}void test_PopBack(pSeqList pSeq) //后删{PopBack(pSeq);PopBack(pSeq);}void test_PushFront(pSeqList pSeq,DataType x) //从前边添加{printf("请输入要添加的数:");scanf("%d",&x);PushFront(pSeq,x);}void test_PopFront(pSeqList pSeq) //从前边删除{PopFront(pSeq);}void test_Remove(pSeqList pSeq,DataType x) //删除一个x元素{printf("输入要删除的x元素:");scanf("%d",&x);Remove(pSeq,x);}void test_RemoveAll(pSeqList pSeq,DataType x) //删除所有x元素{printf("输入要删除的x元素:");scanf("%d",&x);RemoveAll(pSeq,x);}void test_Sort(pSeqList pSeq) //排序{Sort(pSeq) ;}void test_Insert(pSeqList pSeq,int pos,DataType x) //指定位置插入{printf("请输入要插入的数:");scanf("%d",&x);printf("请输入要插入的数的位置:");scanf("%d",&pos);Insert(pSeq,pos,x);}void test_BinarySearch(pSeqList pSeq,DataType x) //查找{int ret = 0;printf("请输入要查找到");ret = BinarySearch(pSeq,x);if(ret == -1){printf("不存在此数!\n");}elseprintf("该数的下标 = %d\n",ret);}int main(){DataType x = 0;int pos = 0;Seq seq;InitSeqList(&seq);test_PushBack(&seq,x);//test_PopBack(&seq);//test_PushFront(&seq,x);//test_PopFront(&seq);//test_Insert(&seq,pos,x);//test_Remove(&seq,x);test_RemoveAll(&seq,x);//test_Sort(&seq);//test_BinarySearch(&seq,x);PrintSeqlist(&seq);system("pause");return 0;}
1 0
- 模拟实现顺序表
- c++模拟实现顺序表
- 模拟实现线性表-顺序存储方式
- C模拟实现静态顺序表
- C++模拟实现静态顺序表
- 模拟实现顺序表-动态的存储方式
- 用链表、顺序表模拟实现栈和队列
- 图形界面模拟一个顺序栈的实现
- 【c++】模拟实现顺序队列方法一
- 【c++】模拟实现顺序队列方法二
- 封装顺序栈(模拟实现stack)
- 封装顺序栈(模拟实现stack)
- 线性表(1)--顺序表模拟
- 【学习总结】顺序表模拟约瑟夫问题
- C#实现顺序表
- C#实现顺序表
- 线性表顺序实现
- 顺序表的实现
- 自定义折线图
- 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
- 杭电 OJ 1028 整数划分
- c++作业6
- 面试笔试算法目录
- 模拟实现顺序表
- ReactNative(二)——HelloWorld
- c++第六次实验
- LeetCode 91. Decode Ways(解码方法)
- 【Spring Framework 深入】—— IoC容器初始化 -> Bean定义资源的载入解析
- 【网络】HTTP基础总结
- 自定义View之onMeasure()
- C++作业6
- U-Boot移植——Nand Flash启动