c_数据结构_顺序表
- #define OK 1
- #define ERROR 0
- #define OVERFLOW -2
- #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
- #define List_Increment 10 //线性表存储空间的分配增量
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- typedef struct{
- int *elem; //存储空间的基地址
- int length;
- int listsize; //定义的一个大小
- }SqList; //申请结构体变量SqList ,SqList作为类型可以声明新的结构体变量,如:SqList l,m[34],*n;
- //初始化 (构造空的线性表)
- InitList_Sq(SqList &L)
- {
- L.elem=(int *)malloc(LIST_INIT_SIZE * sizeof(int)); //存储空间的元素空间大小
- if(!L.elem)exit(OVERFLOW); // 若没有表,则返回overflow
- L.length=;
- L.listsize= LIST_INIT_SIZE;
- printf("------------------申请空间成功----------------\n");
- return OK;
- }
- struct GetElem_Sq(SqList&L,int i, int &e){ //查找元素
- printf("请输入查找位置:");
- scanf("%d",&i);
- if(i< || i>L.length) { //判断查找元素是否在申请空间内
- printf("元素不在空间位置内!!\n\n");
- return ERROR;
- }
- e=L.elem[i-]; // 逐个查找元素
- printf("查找的元素为:%d\n\n",e);
- return OK;
- };
- //在i位置插入元素
- ListInsert_Sq(SqList&L,int i,int e){
- int *p,*q;
- printf("请输入插入位置:");
- scanf("%d",&i);
- printf("插入数据:");
- scanf("%d",&e);
- if(i<||i>L.length+){
- printf("插入位置不在顺序空间内!!!\n\n"); // 如果i值不合法(没有在申请空间内)则返回0
- return ERROR;
- }
- if(L.length>=L.listsize){ //如果存储空间已满,则增加分配容量
- int* newbase=(int*)realloc(L.elem,(L.listsize+List_Increment)*sizeof(int)); //再次申请空间
- if(newbase==NULL)
- printf("存储空间分配失败\n\n"); //存储空间分配失败
- L.elem=newbase; //新的基地址
- L.listsize=L.listsize+List_Increment; //容量增加
- }
- q=&L.elem[i-]; //e元素在i处插入
- for(p=&(L.elem[L.length-]);p>=q;--p) //元素值整体后移
- *(p+)=*p;
- *q=e; //插入e元素
- ++L.length; //表长加一
- return OK;
- }
- ListDelete_Sq(SqList&L,int i,int &e){ // 删除列表中某个位置的元素
- int *p,*q;
- printf("请选出删除元素位置:");
- scanf("%d",&i);
- if(i< || i>L.length){ // 判断删除位置是否在存储空间内
- printf("删除位置不在空间内!!!\n\n");
- return ERROR;
- }
- p=&(L.elem[i-]); //p为被删除的元素
- e=*p;
- printf("删除值为:%d\n\n",e);
- q=L.elem+L.length-; // 表长减一
- for(++p;p<=q;p++) //删除元素后 后继元素整体前移
- *(p-)=*p;
- --L.length;
- return OK;
- }
- int creatnewlist(SqList &L) //创建列表
- {
- int i,n;
- printf("\n\n请用户先存入数据\n\n请选择存入数据个数:");
- scanf("%d",&n);
- while(n<=){
- printf("\n数据个数小于‘1’\n请重新存入数据个数:");
- scanf("%d",&n);
- }
- printf("请输入%d个数据:\n",n);
- if(n>LIST_INIT_SIZE){
- L.elem=(int *)realloc(L.elem,(n+List_Increment)*sizeof(int)); //再次申请空间
- if(!L.elem)exit(OVERFLOW); //如果没有列表 则返回overflow 0
- L.listsize=n+List_Increment;
- }
- for(i=;i<n;i++) //将元素逐一写入列表
- // printf("-----------\n");
- scanf("%d",L.elem+i);
- L.length=n;
- return OK;
- }
- // 逐一打印列表中的元素
- int pr(SqList &L){
- int i;
- if(L.length<){
- printf("列表为空!!\n\n");
- }else{
- for(i=;i<L.length;i++){
- printf("表中元素第%d个元素为:%d\n\n",i,*(L.elem+i));
- }
- }
- return OK;
- }
- void ClearList(SqList &L){ //释放已经申请的空间
- free(L.elem);
- printf("释放空间成功!!\n\n");
- InitList_Sq(L); //调用 InitList_Sq() 创建空的线性表
- creatnewlist(L); //调用 createnewlist()建立新的列表
- }
- void OperateMenu(){ //操作菜单
- printf("--------------元素处理方式---------\n\n");
- printf("0> 退出\n\n");
- printf("1>: 查找给定位置的数据\n\n");
- printf("2>: 插入元素\n\n");
- printf("3>: 删除元素\n\n");
- printf("4>: 打印元素\n\n");
- printf("5>: 释放原列表,创建新列表\n\n");
- printf("请选择对元素的处理:");
- }
- void main(){
- int i=,e=,k,boo=,w=;
- SqList L; //声明
- printf("注:此测试过程输入值应全为数字\n\n");
- printf("请用户选择存入数据或退出程序:\n\n");
- printf("存入数据请输入:'1'\n\n");
- printf("退出请选择'0'或 其它!!\n\n");
- printf("请选择:");
- scanf("%d",&w);
- if(w==){
- InitList_Sq(L); //调用 InitList_Sq() 创建空的线性表
- creatnewlist(L); //调用 createnewlist()建立新的列表
- OperateMenu(); //指令导向
- scanf("%d",&k);
- while(k){
- switch (k)
- {
- case :break;
- case :boo=GetElem_Sq(L,i,e);
- if(boo)
- printf("查询成功!!\n\n");
- else
- printf("查询失败!!\n\n");
- break;
- case :boo=ListInsert_Sq(L,i,e);
- if(boo)
- printf("插入成功!!\n\n");
- else
- printf("插入失败!!\n\n");
- break;
- case :boo=ListDelete_Sq(L,i,e);
- if(boo)
- printf("删除成功!!\n\n");
- else
- printf("删除失败!!\n\n");
- break;
- case :pr(L);
- break;
- case :ClearList(L);break;
- }
- OperateMenu();
- scanf("%d",&k);
- }
- }else{
- exit(OVERFLOW);
- }
- }
c_数据结构_顺序表的更多相关文章
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- [Python] 数据结构--实现顺序表、链表、栈和队列
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...
- cb03a_c++_数据结构_顺序容器_STL_stack
/*cb03a_c++_数据结构_顺序容器_STL_stack堆栈:LIFO--Last In First Out后进先出,用于系统程序设计自适应容器(容器适配器),不是独立的容器,是一个适配器栈适配 ...
- cb02a_c++_数据结构_顺序容器_STL_list类_双向链表
/*cb02a_c++_数据结构_顺序容器_STL_list类_双向链表实例化std::list对象在list开头插入元素在list末尾插入元素在list中间插入元素,插入时间恒定,非常快.数组:中间 ...
- cb01a_c++_数据结构_顺序容器_STL_deque类
/*cb01a_c++_数据结构_顺序容器_STL_deque类deque是一个动态数组,比vector更加灵活.两者都属于动态数组deque与vector非常类似deque可以在数组开头和末尾插入和 ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- [数据结构]C#顺序表的实现
在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...
- 【PHP数据结构】顺序表(数组)的相关逻辑操作
在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
随机推荐
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- java 批量插入 Oracle
sql = "INSERT INTO LOG_FILENAME(ID,FILENAME,CREATETIME) VALUES(2,?,sysdate)"; public void ...
- 前端-----margin用法(盒子模型里补充)
margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...
- python 前面几个单词含义
切片 str[start:end:step] start:从xxx开始 (startswith) end:切到xxx为止 (endswith) 不包括 字符串操作 .capitalize()# ...
- android7.0以上使用融云即使通讯的坑
一.连接服务器不走connect()方法 在android6.0以下,在使用融云sdk时,直接将依赖库引入到项目中即可.但是在7.0及以上时,直接应用会发现消息一直发送不出去,错误提示为dlopen ...
- winform数据存储的方式
存储的方式有三种: 一.SQL数据库 二.Access(office 2007版本以上是需要安装驱动的) 三.XML
- swift 实践- 04 -- UIButton
import UIKit class ViewController: UIViewController { // 按钮的创建 // UIButtonType.system: 前面不带图标, 默认文字为 ...
- 查看MySQL版本的命令及常用命令
Windows / Linux 系统 前提是已经正确安装了 MySQL,打开 Windows 系统中的命令行工具(Win + R --> 输入 cmd 并按下回车键)--> 输入命令: m ...
- Mac配置Jdk 安装及系统环境配置
注:本文来于< Mac配置Java开发环境 > 1. 下载JDK 从下面链接选择合适版本的安装包进行下载...笔者下载的是jdk-9.0.1 链接:http://www.oracl ...
- Linux永久修改IP地址
通常我们为了快速修改IP地址,会这么做 ifconfig eth0 192.168.0.2 netmask 255.255.255.0 这样修改IP地址后,你再运行ifconfig命令后,的确IP地址 ...