线性表 - 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 ...
随机推荐
- php的颜色定义表
http://outofmemory.cn/code-snippet/1960/php-color-define-table <? /////////////////////////////// ...
- Supervisord常见用法和介绍
Supervisord是用Python实现的一款非常实用的进程管理工具.supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启.关闭.重启等操作,而且它管理的进程 ...
- 【犀牛书笔记】JavaScript正则表达式的模式匹配
正则表达式,是一个描述字符模式的对象. JavaScript用RegExp类表示正则表达式 String和RegExp都定义了相关方法 原创文章,转载请注明:http://www.cnblogs.co ...
- 开发高性能的MongoDB应用—浅谈MongoDB性能优化
关联文章索引: 大数据时代的数据存储,非关系型数据库MongoDB 性能与用户量 “如何能让软件拥有更高的性能?”,我想这是一个大部分开发者都思考过的问题.性能往往决定了一个软件的质量,如果你开发的是 ...
- 用Vue.js递归组件构建一个可折叠的树形菜单
在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself! ...
- sublime text 格式化html css 与显示函数列表
sublime 格式化html css 1.ctrl + shift + p 2.输入install package,选择install package 3.输入:HTML-CSS-JS Pretti ...
- <!--#include file= menu.shtml --> 引用出现空白
打开footer 然后 在DW里 点--->修改--->页面属性---->标题/编码----->把包括unicode签名(bom)的勾取消 就OK了 作用:可使用 .shtml ...
- 第一百五十八节,封装库--JavaScript,ajax说明
封装库--JavaScript,ajax说明 封装库ajax()方法,ajax通讯方法,跨页面向动态页面发送或获取数据 /** ajax()方法,ajax通讯方法,跨页面向动态页面发送或获取数据 * ...
- 微软公布带外安全更新MS14-068
11月19日,微软公布了带外更新MS14-068以解决Windows 系统中的一个安全漏洞,该补丁安全等级为"严重". MS14-068 | Kerberos 中的漏洞可能同 ...
- html table 上移下移
js操作表格操方法,增加,修改,删除,一行记录 随机选择行 添加一行 删除选定行 上移选定行 下移选定行 按第一列排序 按数据和排序 <!DOCTYPE html PUBLIC " ...