线性表 - 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学习笔记(4)GD库画五角星
<?php //加header头,不然浏览器乱码 header("content-type: image/png"); //创建画布资源 $img = imagec ...
- iOS swift 富文本显示 富文本在iOS中使用场景和解决方案
项目中很多地方都会用到富文本的内容:比如一般的商品详情,视频详情,资讯详情等,运营人员通过后台的富文本编辑器编辑的内容,前端拿到的就是一段富文本的字符串,这富文本大多都是图片和文字的组合.我们今天介绍 ...
- linux学习笔记26--命令wc
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的行数.字数.字节数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的行数.字 ...
- cocos2dx触摸
两种方法其实都一样,CCLayer也是继承CCTouchDelegate. 1.继承CCTouchDelegate 添加触摸代理 CCTouchDispatcher* pDispatcher = CC ...
- OkHttp+Stetho+Chrome调试android网络部分(原创)
android网络调试一直是一个比较麻烦的部分,因为在不同序列的请求中,返回的数据会有不同的变化,如果能像web开发一样使用调试功能查看页面的访问数据该是多么美好的事情! 很幸运的是,现在Androi ...
- php调用C代码的实现方法
在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用2 由于php的性能问题,需要用C来实现部分功能 针对第一种情况,最合适的方法是用system调用,把现有C代 ...
- C. Beautiful Numbers
C. Beautiful Numbers Time Limit : 4000/2000ms (Java/Other) Memory Limit : 524288/262144K (Java/Oth ...
- MapReduce实战(六)共同粉丝
需求: 利用mapReduce实现类似微博中查找共同粉丝的功能.如下: A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O ...
- Softmatic ScreenLayers 将截图存为psd格式
Softmatic ScreenLayers 是 Mac 上的一款截图软件,它与众不同的地方是可以将截取的屏幕图片按PSD格式保存到本地,并且图片里的每一种元素都被单独放入一个独立的layer,比如M ...
- IntelliJ IDEA JDK配置
1.JDK环境 目前大多数IDE都没有集成JDK环境,IDEA也是一样,在使用IDEA之前首先要安装JDK,并且配置环境变量.与其他IDE不同之处在于,IDEA不会自动匹配系统的JDK环境,编译时会提 ...