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 ...
随机推荐
- java 批量插入 Oracle
sql = "INSERT INTO LOG_FILENAME(ID,FILENAME,CREATETIME) VALUES(2,?,sysdate)"; public void ...
- MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)
mysql致力于项目开发及数据库管理之间解耦合(帮忙封装一些数据处理方法,使应用程序的开发者可以专注于应用程序的开发),但受限于不同部门沟通的成本问题,现阶段直接使用的价值不大. 一.视图(只能sel ...
- appium+java报错之nodejs报错
$ gulp(node:784) fs: re-evaluating native module sources is not supported. If you areusing the grace ...
- HttpServletResponse设置下载文件
// path是指欲下载的文件的路径. File file = new File(path); // 取得文件名. String fi ...
- 2018谷歌I/O开发者大会8大看点汇总 新品有哪些
2018谷歌I/O开发者大会8大看点汇总 新品有哪些美国科技媒体The Verge近日撰文,列举了在即将召开的2018年谷歌I/O开发者大会上的8大看点,包括Android P.人工智能等等. 以下为 ...
- Confluence 6 修改 Home 目录的位置
当 Confluence 第一次启动的时候,Confluence 将会读取 confluence-init.properties 文件并从这个文件中确定如何去查找 Home 目录. 希望修改 home ...
- Confluence 6 附件是如何被索引的
当一个文件被上传到 Confluence 后,Confluence 将会尝试对文件进行解压,然后对文件中的内容进行索引.这样系统就能够允许用户对文件中的内容进行搜索,而不仅仅是搜索文件名.这个过程对系 ...
- 【batch】批处理文件多参数处理和for循环字符串连接
batch文件写起来,酸爽不谈了.[1]今天在github上发现个好东西batsh,运行地址:https://batsh.org/.[1] 这里需求的场景是:调用run.bat脚本并传入多个参数(相对 ...
- 前端之css样式(选择器)。。。
一.css概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,对html标签的渲染和布局 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 例如 二.c ...
- CSS3媒体查询的部分重要属性
width:视口宽度 height:视口高度 device-width:渲染表面的宽度,就是设备屏幕的宽度 device-height:渲染表面的高度,就是设备屏幕的高度 orientation:检查 ...