//功能:顺序表的实现
//思路:初始化一个顺序表,如果n > INIT_LIST_SIZE 则重新分配内存空间
//反之,将元素存入顺序表
#include <stdio.h>
#include <malloc.h>
#define INIT_LIST_SIZE 2
#define ERROR 0
#define OK 1
#define LISTINCREMENT 10
#define SIZE sizeof(int)
typedef int ElemType;
typedef int Status;
//顺序表定义
typedef struct{
int length;
int listsize;
ElemType *elem;
}sqList;
//初始化顺序表
sqList initSqList()
{
sqList L;
L.elem = (ElemType *)malloc(sizeof(ElemType) * INIT_LIST_SIZE);
if(!L.elem)
{
printf("顺序表初始化失败!");
}
L.length = 0;
L.listsize = INIT_LIST_SIZE;
return L;
}
//创建顺序表
sqList createSqList(sqList L)
{
int i =0, e;
int *newBase;
printf("请输入顺序表元素(以Ctrl + Z结束):");
while(scanf("%d", &e) != EOF)
{
if(i >= L.listsize)
{
newBase = (ElemType *)realloc(L.elem, SIZE * (L.listsize + LISTINCREMENT));
L.elem = newBase;
L.listsize += LISTINCREMENT;
}
L.elem[i++] = e;
}
L.length = i;
printf("输入的顺序表元素为:");
for(i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
return L;
}
//插入顺序表的值:
sqList InsertValue(sqList L, int location, ElemType e)
{
ElemType *newBase;
//当顺序表已存满时
if(L.length >= L.listsize)
{
newBase = (ElemType *)realloc(L.elem, SIZE * (L.listsize + LISTINCREMENT));
L.elem = newBase;
L.listsize += LISTINCREMENT;
}
ElemType * q = &L.elem[location - 1];
ElemType *p = &L.elem[L.length];
for(; p > q; p--)
{
*p = *(p - 1);
}
*q = e;
++L.length;
return L;
}
//按位置查找值
ElemType GetElem(sqList L, int location)
{
ElemType *e;
e = L.elem + location - 1;
return *e;
}
//定位元素,返回第一个匹配的位置
int LocateElem(sqList L, ElemType e)
{
for(int i = 0; i < L.length; i++)
{
if(L.elem[i] == e)
return i+1;
}
return 0;
}
//删除顺序表的元素,按位置删除
sqList deleteElemLocation(sqList L, int location)
{
ElemType *p = &L.elem[location - 1];
for(; p < &L.elem[L.length - 1]; p++)
{
*p = *(p + 1);
}
L.length--;
return L;
}
int main()
{
int len;
sqList L = initSqList();
L = createSqList(L);
//插入值
printf("请输入插入值的位置:");
int location;
int element;
scanf("%d", &location);
while(location < 1 || location > L.length)
{
printf("输入位置有误,请重新输入!\n");
scanf("%d", &location);
}
printf("请输入插入的元素:");
scanf("%d", &element);
L = InsertValue(L, location, element);
printf("插入元素后的顺序表为:\n");
for(int i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
//查找元素
printf("请输入查找的位置:");
scanf("%d", &location);
while(location < 1 || location > L.length)
{
printf("输入位置有误,请重新输入!\n");
scanf("%d", &location);
}
printf("第%d个元素为%d\n", location, GetElem(L, location));
printf("请输入查找的元素值:");
scanf("%d", &element);
if(!LocateElem(L, element))
{
printf("不存在此元素!");
}else
{
printf("元素%d在顺序表第%d个位置!\n", element, LocateElem(L, element));
}
//删除元素
printf("请输入删除元素的位置:");
scanf("%d", &location);
while(location < 1 || location > L.length)
{
printf("输入位置有误,请重新输入!\n");
scanf("%d", &location);
}
L = deleteElemLocation(L, location);
printf("删除后的顺序表元素为:\n");
for(i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n一共有%d个元素\n", L.length);
return 0;
}
分享到:
相关推荐
在编程中,顺序表通常用数组来实现,因为数组提供了直接访问任意位置元素的能力,使得增删改查等基本操作变得简单高效。下面我们将深入探讨顺序表的实现、其特点以及增删改查的具体操作。 首先,顺序表是由一组相同...
初学数据结构,顺序表的增删改查自己还不是很熟练,将自己的学习记录在CSDN社区。希望在编程道路的小伙伴共同进步
### 线性表中顺序表的增删改查 #### 概述 在计算机科学中,线性表是一种常见的数据结构,它是由相同类型的数据元素组成的有限序列。线性表中的每个元素都有一个直接前驱和直接后继(除了第一个元素没有前驱,最后...
本主题主要聚焦于线性表的顺序存储以及其增删改查功能。 顺序存储方式是指将线性表中的元素在内存中按其逻辑顺序依次存储,通常是通过数组来实现。这种存储方式的优点是访问效率高,因为数组元素的存取时间复杂度为...
本资料包提供了一个基于C语言实现线性顺序表的实例,包括增删改查以及排序和合表操作。 线性顺序表是一种特殊的数组,它的元素按线性顺序排列,可以通过下标访问任意位置的元素。在C语言中,我们通常使用一维数组来...
3. **增删改查(CRUD)操作**: CRUD是数据库操作的基本概念,也适用于这个通讯录系统。"增"是指添加新的联系人到列表;"删"是删除特定的联系人;"改"是更新联系人的信息;"查"是查询和显示通讯录中的联系人。这些...
数据库部分:创建表、增删改查语句的书写等。 前端部分:HTML、CSS、jQuery、JavaScript等。 编码顺序 添加项目需要使用的各种jar包 HTML 页面表单的编写 Apache方法的DBUtils编写 实体类的数据初始化(添加私有...
【标题】: "简单的留言板系统实现增删改查功能" 在IT领域,开发一个简单的留言板系统是初学者常用来学习Web应用基础的实践项目。这个系统涵盖了基础的数据库操作、前端展示以及用户交互,帮助开发者熟悉数据库设计...
顺序表的增删改查(5).cpp
【仅实现增删改查的留言板】是一个针对初学者设计的简单应用,旨在教授基本的数据库操作和用户交互。这个留言板系统的核心功能包括添加留言、删除留言、修改留言以及查询留言,这些都是任何基础数据管理系统的基石。...
通过图形化界面,用户可以直观地看到增删改查操作如何影响树的形态,这对于学习和调试非常有帮助。 ### 应用场景 B+ Tree被广泛应用于数据库索引,如MySQL的InnoDB存储引擎就使用了B+ Tree。文件系统如ext4也采用B+...
线性表的增删改查操作 - **插入**:在线性表的指定位置插入一个新元素,需要找到插入点并更新指针。对于链表,这涉及修改前后两个节点的指针。 - **删除**:根据给定的元素或位置删除一个元素,需要找到要删除的...
- `FirstTitleDao.java`:负责具体的表操作,如增删改查。 - `entity`包:包含`FirstTitle.java`实体类。 - `FirstTitle.java`:代表`FirstTitle`表的实体类,包含表的所有字段。 - **WebRoot文件夹**: - 包含...
这个“Struts2 增删改查实例”是一个非常适合初学者的实践项目,它将帮助你理解如何在实际应用中使用Struts2来实现基本的数据操作功能。 首先,Struts2的核心组件包括Action类、配置文件(struts.xml)、拦截器...
它们在文件系统和数据库中扮演着核心角色,尤其是在执行增删改查(CRUD:Create、Read、Update、Delete)操作时。下面将详细介绍这两种数据结构及其在文件操作中的应用。 顺序表,顾名思义,是数据在内存中按照线性...
本主题主要围绕“redis增删改查操作”,特别是如何利用Redis的list和hash数据结构来实现数据的有序存储和管理。 首先,`RedisDealUtil.java`和`RedisConnUtil.java`是两个关键的Java类,它们通常包含了连接Redis...
### HQL 增删改查 #### 1. 获取当前会话 (getCurrentSession) 在Hibernate中,`getCurrentSession`方法用于获取当前线程绑定的Session对象。这是进行HQL查询的基础,所有的HQL操作都需要在一个有效的Session中进行...
对于初学者来说,理解如何在List中进行增删改查操作是掌握Java集合框架的基础。本文将详细介绍这些基本操作。 1. **添加元素(Add)** - `add()` 方法:向列表末尾添加一个元素,如 `list.add(element)`。 - `add...
### SQL语句详解:增删改查 #### 一、增(Insert) SQL中的`INSERT`语句用于向数据库表中插入新的记录。根据提供的内容,我们了解到有四种不同的方式来实现这一操作。 1. **使用`INSERT`插入单行数据** 语法:`...