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 ...
随机推荐
- 使用Fiddler进行手机端抓包
1.手机和电脑在同一局域网 2.在电脑上查看ip地址 3.如果是需要抓取https,则需要在浏览器中输入http://xxx.xxx.x.xxx:8888(第二部查到的ip地址 + Fiddler 的 ...
- vue与jquery合作
2017年2月26日 14:59:34 星期日 场景: jquery的$.post, $.get是$.ajax的封装, 是异步的 因此, 有肯能在初始化vue实例的时候, 异步请求的结果还没返回, 这 ...
- Laravel 5.2--git冲突error: Your local changes to the following files would be overwritten by merge:
今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...
- django.db.utils.OperationalError: (1045, "Access denied for user 'ODBC'@'localhost' (using password)
错误描述: 从SQLLITE数据库换为MYSQL数据库,执行 python manage.py migrate 命令时,报错:django.db.utils.OperationalError: (10 ...
- 使用Gitblit 在Windows上部署Git Server
Windows平台下Git服务器搭建 首先要下载Java JDK,安装完成后设置环境变量,先把java环境配好,接下来才是下面的gitblit.关于java环境配置请看上一篇文章 gitblit下载 ...
- __dict__(字典的另一种用法)
class Foo(): def __init__(self): self.name=None self.age=19 self.addr='上海' @property def dict(self): ...
- 洛谷P4630 [APIO2018]铁人两项 [广义圆方树]
传送门 又学会了一个新东西好开心呢~ 思路 显然,假如枚举了起始点\(x\)和终止点\(y\),中转点就必须在它们之间的简单路径上. 不知为何想到了圆方树,可以发现,如果把方点的权值记为双联通分量的大 ...
- flex下部固定高,上部不固定,而且超过内容要滚动
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 关于STM32 __IO 的变量定义
这个_IO 是指静态 这个 _IO 是指静态 volatile uint32_t 是指32位的无符号整形变量uint32_t 是指32位的无符号整形变量: 搞stm32这么久了,经常看到stm32里面 ...
- easyui的combobox,自动搜索的下拉框
作者:多来哈米 如图,输入关键字,左匹配检索 HTML代码 <input class="easyui-combobox" name="userId" id ...