线性表 - C语言完整实现
#include <stdio.h>
#define false 0
#define true 1
#define MAXSIZE 20
typedef int bool;
typedef int ElementType;
struct ListNode {
ElementType Data[MAXSIZE];
int length; // 线性表的长度
};
typedef struct ListNode List;
typedef struct ListNode *PtrToList; // 后续函数传参, 传的就是指针
PtrToList MakeEmpty (); // 创建空线性表
bool Insert (PtrToList L, ElementType X, int Pos); // 插入
void PrintNodes (PtrToList L); // 打印
int Find (PtrToList L, ElementType X); // 查找
bool Delete (PtrToList L, int Pos); // 删除
int main () {
PtrToList PtrDemo; // PtrDemo是指向结构体的指针变量
PtrDemo = MakeEmpty(); // 创建空表
/* 插入数据测试开始 */
Insert(PtrDemo, 100, 0);
Insert(PtrDemo, 10, 1);
Insert(PtrDemo, 1, 2);
Insert(PtrDemo, 21, 0);
PrintNodes(PtrDemo); // 21 100 10 1
/* 插入数据测试结束 */
/* 查找测试开始 */
int Pos; // 存放找到后元素的位置
int X = 1; // 要查找的元素
Pos = Find(PtrDemo, X);
printf("要查找的元素是: %d\n", X);
printf("位置信息是: %d\n", Pos);
X = 200;
Pos = Find(PtrDemo, X);
printf("要查找的元素是: %d\n", X);
printf("位置信息是: %d\n", Pos);
/* 查找测试结束 */
/* 删除测试开始 */
printf("\n");
printf("当前线性表中的元素\n");
PrintNodes(PtrDemo);
Delete(PtrDemo, PtrDemo->length - 1); // 删除最后一个元素
printf("删除最后一个元素\n");
PrintNodes(PtrDemo);
/* 删除测试结束 */
return 0;
}
// 1. 初始化
// 申请一个List需要的空间, 返回一个指向PtrToList的指针
PtrToList MakeEmpty () {
PtrToList L;
L = (PtrToList)malloc(sizeof(List));
L->length = 0;
return L;
}
// 2. 插入
// Pos的合法位置是 0 ~ L->Length
// 例如 Pos=0, 则代表所有元素都向右移动一格, 把数组0下标空
// 出来, 执行, L->Data[0] = X;
// 成功返回true, 失败返回false
bool Insert (PtrToList L, ElementType X, int Pos) {
int i;
if (L->length == MAXSIZE) {
printf("表空间已满, 不能继续插入\n");
return false;
}
if (Pos < 0 || Pos > L->length) {
// i的合法取值是 1 ~ L->length - 1
printf("插入顺序不合法\n");
return false;
}
for (i=L->length; i>=Pos+1; i--) {
L->Data[i] = L->Data[i-1];
}
L->Data[Pos] = X;
L->length += 1;
return true;
}
// 3. 打印输出
void PrintNodes (PtrToList L) {
int i;
printf("线性表长度: %d\n", L->length);
printf("线性表数据如下:\n");
for (i=0; i<L->length; i++) {
printf("%d\t", L->Data[i]);
}
printf("\n");
}
// 4. 查找
// 给定元素值X, 查找其在线性表的位置
// 找到返回位置下标, 找不到返回 -1
int Find (PtrToList L, ElementType X) {
int i;
for (i=0; i<L->length; i++) {
if (L->Data[i] == X) {
return i;
}
}
return -1;
}
// 5. 删除
// 删除指定位置Pos的元素
// Pos取值范围, [0, L->length-1]
bool Delete (PtrToList L, int Pos) {
int i;
if (Pos < 0 || Pos > L->length - 1) {
printf("删除位置错误\n");
return false;
}
for (i=Pos; i<=L->length; i++) {
L->Data[i] = L->Data[i + 1];
}
L->length--;
return true;
}
线性表 - C语言完整实现的更多相关文章
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
- 使用C语言实现线性表
线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结构体或对象.例如:1,2,3,4,5是一个线性表,A,B ...
- <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现
栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外, ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...
- 纯C语言实现线性表
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef ...
随机推荐
- 有效提升大数据量写入excel的效率
在开发过程中经常会有需要将数据导出到 excel 的需求,当数据量很大,达到几万甚至几十万.几百万级别的时候,如何加快生成 excel 的速度呢?首先普及一下知识背景:Excel2003 及以下版本一 ...
- C++11 中function和bind以及lambda 表达式的用法
关于std::function 的用法: 其实就可以理解成函数指针 1. 保存自由函数 void printA(int a) { cout<<a<<endl; } std:: ...
- mongdb复制集搭建
可参考官网教程 复制集增加了数据的冗余同时也提高了mongodb的可靠性,相比传统的主从架构,mongodb具有自动容灾的特性,即主库挂掉后会自动从剩下的从库中选举出一个节点做为主库(不需要人工干预) ...
- c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段(转但是都是使用过)
DateTime dt = DateTime.Now; //当前时间 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 24小时制 Dat ...
- [转]Tomcat和Apache的区别和联系
Apache,指的是Apache软件基金会下的一个项目——Apache HTTP Server Project:Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮件代理服务器.通用的T ...
- 玩转Win10的45个快捷键
1Win10快捷键大全(第一部分) Win10发布已经快两个星期了,各项新功能也让小伙伴们兴奋不已.和之前系统一样,Win10也加入了很多经典的快捷键,同时还加入了全新触控手势.今天小编就将所有的Wi ...
- EasyUI获取DataGrid中某一列的所有值
function count() { var rows = $('#dg'').datagrid('getRows')//获取当前页的数据行 var total = 0; for (var i = 0 ...
- PHP 中 json_encode中文处理、urlencode方法、post中文乱码
当使用php自带的json_encode对数据进行编码时,中文都会变成unicode,导致不可读.如:对字符串”厦门“进行json_encode后,输出的是"\u53a6\u95e8&quo ...
- Git进一步学习
Git 安装配置 在使用Git前我们需要先安装 Git.Git 目前支持 Linux/Unix.Solaris.Mac和 Windows 平台上运行. Git 各平台安装包下载地址为:http://g ...
- 【Raspberry pi】系统安装及基础配置
1.系统安装 见官网:http://www.raspberrypi.org/quick-start-guide 2.基础配置 转载自http://www.eeboard.com/bbs/thread- ...