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 ...
随机推荐
- in exists
区别及应用场景 in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists.其实 ...
- 利用HBuilder将vue项目打包成移动端app
事先准备,开发完成的web app项目(也可以利用vue-cli脚手架构建vue模板项目),npm run dev可以正常预览的项目 1,将项目目录下config文件内index.js中assetsP ...
- 使用tomcat发布含有shtml文件的web程序
平常都是使用html或jsp,当导入含有shtml的一个web项目时,向平常一样使用Jetty运行,访问到shtml文件时,直接在浏览器上显示出了源码. 查询,使用tomcat发布,修改tomcat的 ...
- js 测试性能
console.time('querySelector');for(var i=0; i<1000; i++){document.querySelector('body');}console.t ...
- SmartGit/HG
SmartGit/HG 是一款开放源代码的.跨平台的.支持 Git 和 Mercurial 的 SVN 图形客户端,可运行在Windows.Linux 和 MAC OS X 系统上.可用的最新版本 S ...
- .NET基础之this关键字
1.限定类似名称隐藏的成员 public Employee(string name, string alias) { // Use this to qualify the fields, name a ...
- 获得小程序码getWXACodeUnlimit
报错47001 data format error 出现这个错误必须是Body里面的raw才可以,而且access_token参数必须写在地址后面,不能写在raw里面,不然也出错. /** * 生命周 ...
- PHP项目笔记
1.controller输出前端传来的值:var_dump($_POST['oid']); 2.var_dump($_POST['oid']);die:
- Confluence 6 升级 Confluence 使用数据源
如果你对 Confluence 进行升级(手动或者使用安装器),你需要: 停止 Confluence (如果你已经尝试开始启动). 拷贝你的数据库驱动到 <installation-direct ...
- ios蓝牙详解
最近这段时间在研究蓝牙,也研究了一段时间了现在在下面做个总结 1 其实蓝牙连接只要明白了整体原理,其实挺简单的 2 大部分情况下,手机作为中心管理者,而连接的设备被称为外设,外设的结构有点像一颗大树 ...