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 ...
随机推荐
- Apollo 代码的编译演示
Apollo 代码的编译演示 官方的文档 -- 运行线下演示 如果你没有车辆及车载硬件, Apollo还提供了一个计算机模拟环境,可用于演示和代码调试. 线下演示需要设置docker的release环 ...
- ACL认证 vs 密码认证
呼入时需要进行认证:acl IP认证 和 密码认证. acl 认证优先进行. ACL认证成功: Access Granted. 直接进入 sip_profile>context 进行路由 A ...
- python中__init__ ,__del__ &__new__
__new__ __new__方法是用来创建对象,__new__方法需要有一个返回值,这个返回值表示创建出来的对象的引用 __init__ __init__方法在类的一个对象被建立时 ,马上执行.__ ...
- Ex4_21 最短路径算法可以应用于货币交易领域..._第十二次作业
(a) 建立一个有向图G(V,E),每个顶点表示一种货币,两个顶点之间的边权的大小ex[u][v]表示两种货币之间的汇率,若要找一个最有利的兑换序列,把货币s兑换成货币t,即在若干种兑换序列中选择 ...
- Linux学习之CentOS(一)--CentOS6.4环境搭建
Linux学习之CentOS(一)--CentOS6.4环境搭建http://www.cnblogs.com/xiaoluo501395377/archive/2013/03/31/CentOs.ht ...
- MySQL笔记二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- chrome调试工具怎么限制网速
在做项目的时候,我们测试的时候有时需要限制网速
- Modbus库开发笔记:Modbus ASCII Slave开发
与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...
- Oauth2.0 QQ&微信&微博实现第三方登陆
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
- Confluence 6 配置数据库查询超时时间
如果数据库的查询时间太长同时你的应用程序显示没有响应,你可以配置数据库的查询超时时间.在默认情况下 Confluence 没有超时时间.希望配置数据库查询超时时间,在你的测试服务器上进行下面的操作: ...