#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_数据结构_顺序表的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. cb03a_c++_数据结构_顺序容器_STL_stack

    /*cb03a_c++_数据结构_顺序容器_STL_stack堆栈:LIFO--Last In First Out后进先出,用于系统程序设计自适应容器(容器适配器),不是独立的容器,是一个适配器栈适配 ...

  4. cb02a_c++_数据结构_顺序容器_STL_list类_双向链表

    /*cb02a_c++_数据结构_顺序容器_STL_list类_双向链表实例化std::list对象在list开头插入元素在list末尾插入元素在list中间插入元素,插入时间恒定,非常快.数组:中间 ...

  5. cb01a_c++_数据结构_顺序容器_STL_deque类

    /*cb01a_c++_数据结构_顺序容器_STL_deque类deque是一个动态数组,比vector更加灵活.两者都属于动态数组deque与vector非常类似deque可以在数组开头和末尾插入和 ...

  6. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  7. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  8. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  9. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

随机推荐

  1. ansible笔记(5):常用模块之文件操作(二)

    ansible笔记():常用模块之文件操作(二) 文件操作类模块 find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样. 此处我们介绍一些find模块的常用参数, ...

  2. Razor视图基本语法

    <!--Razor C#--> @for (int i = 0; i < 10; i++) {     <baobao>good</baobao> } < ...

  3. 构造函数中base与this的区别

    base是对父类的引用,而this是对类本身的引用. namespace ConsoleApplication1 { public class BaseClass { private string n ...

  4. 随机函数rand()和srand()

    C++中随机函数rand()和srand()的用法 一.rand() 函数名:   rand     功   能:   随机数发生器   用   法:   int rand(void); 所在头文件: ...

  5. VUE (vue-cli)脚手架项目说明

    1. 概述 1.1 说明 使用vue-cli快速创建的vue项目目录如下: build  -- webpack相关配置以及服务启动文件,配置多依赖于下边的config文件夹中内容 config -- ...

  6. ORACLE 字段AES算法加密、解密

    ORACLE 字段AES算法加密.解密(解决中文乱码问题)2014年02月12日 17:13:37 华智互联 阅读数:97971.加解密函数入口 CREATE OR REPLACE FUNCTION ...

  7. FileStorage

    1. 函数说明                  功能 函数声明 参数 FileStorage构造函数 cv::FileStorage:: FileStorage(const String& ...

  8. Confluence 6 数据库表-空间(Spaces)

    这个表格与空间的管理有关. spaces 有关空间使用的信息:key,空间的名称和数字 ID. https://www.cwiki.us/display/CONF6ZH/Confluence+Data ...

  9. SpringMVC国际化与文件上传

    点击阅读上一章 其实SpringMVC中的页面国际化与上一章的验证国际化基本一致. 1.对页面进行国际化 1)首先我们对Spring配置文件中添加国际化bean配置 <!-- 注册国际化信息,必 ...

  10. 【ssh】端口转发

    来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 ...