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 ...
随机推荐
- Mudo C++网络库第十一章学习笔记
反思C++面向对象与虚函数 C++语言学习可以看<C++ Primer>这本书; 在C++中进行面向对象编程会遇到其他语言中不存在的问题, 其本质原因是C++ class是值语义, 而非对 ...
- MySQL(介绍,安装,密码操作,权限表)
一.数据库介绍1.数据库相关概念 a.支持并发 b.锁的问题 c.对客户端请求进行认证 d.存取效率(降低IO次数) 数据库服务器(本质就是一个台计算机,该计算机之上安装 ...
- laravel sql复杂语句,原生写法----连表分组
### 使用了临时表.又分组又连表的感觉好难写,使用拉 ravel 但是现在越来也相信,没解决一个新的难题,自己又进步了一点点 ### 原生的sql: select user_code, realna ...
- VUE 数据请求和响应(axios)
1. 概述 1.1 简介 axios是一个基于Promise(本机支持ES6 Promise实现) 的HTTP库,用于浏览器和 nodejs 的 HTTP 客户端.具有以下特征: 从浏览器中创建 XM ...
- Codeforces 1107G Vasya and Maximum Profit [单调栈]
洛谷 Codeforces 我竟然能在有生之年踩标算. 思路 首先考虑暴力:枚举左右端点直接计算. 考虑记录\(sum_x=\sum_{i=1}^x c_i\),设选\([l,r]\)时那个奇怪东西的 ...
- TIMESTAMPN(N) WITH LOCAL TIMEZONE数据类型转换
--TYPE#=231为TIMESTAMP(N) WITH LOCAL TIME ZONE,181为TIMESTAMP(N) WITH TIME ZONEselect u.name || '.' || ...
- 手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间(转)
转载地址:https://www.cnblogs.com/xzzzys/p/7526761.html 1 用定位为题来解决var oHeight = $(document).height(); // ...
- linq基本操作
一.Linq有两种语法: 1. 方法语法 2. 查询语法 下面举个例子看看这两种方法的区别 比如现在有一个学生类 public class student { public string user ...
- socket-WebSocket HttpListener TcpListener 服务端客户端的具体使用案例
/// <summary>/// 启动服务监听的ip和端口的主线程/// </summary>/// <param name="tunnelPort" ...
- Confluence 6 PostgreSQL 输入你的数据库细节
在 Confluence 的设置安装向导中,将会指导你 Confluence 如何连接到你的数据库.请确定选择 "My own database". 使用 JDBC 连接(默认) ...