线性表的定义与操作-顺序表,链式表(C语言)
顺序表:
typedef int Position;
typedef struct LNode *List;
struct LNode {ElementType Data[MAXSIZE];Position Last;
};/* 初始化 */
List MakeEmpty()
{List L;L = (List)malloc(sizeof(struct LNode));L->Last = -1;return L;
}/* 查找 */
#define ERROR -1Position Find( List L, ElementType X )
{Position i = 0;while( i <= L->Last && L->Data[i]!= X )i++;if ( i > L->Last ) return ERROR; /* 如果没找到,返回错误信息 */else return i; /* 找到后返回的是存储位置 */
}/* 插入 */
/*注意:在插入位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是存储下标位置(从0开始),两者差1*/
bool Insert( List L, ElementType X, Position P )
{ /* 在L的指定位置P前插入一个新元素X */Position i;if ( L->Last == MAXSIZE-1) {/* 表空间已满,不能插入 */printf("表满"); return false; } if ( P<0 || P>L->Last+1 ) { /* 检查插入位置的合法性 */printf("位置不合法");return false; } for( i=L->Last; i>=P; i-- )L->Data[i+1] = L->Data[i]; /* 将位置P及以后的元素顺序向后移动 */L->Data[P] = X; /* 新元素插入 */L->Last++; /* Last仍指向最后元素 */return true;
} /* 删除 */
/*注意:在删除位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是存储下标位置(从0开始),两者差1*/
bool Delete( List L, Position P )
{ /* 从L中删除指定位置P的元素 */Position i;if( P<0 || P>L->Last ) { /* 检查空表及删除位置的合法性 */printf("位置%d不存在元素", P ); return false; }for( i=P+1; i<=L->Last; i++ )L->Data[i-1] = L->Data[i]; /* 将位置P+1及以后的元素顺序向前移动 */L->Last--; /* Last仍指向最后元素 */return true;
}
链式表:
typedef struct LNode *PtrToLNode;
struct LNode {ElementType Data;PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;/* 查找 */
#define ERROR NULLPosition Find( List L, ElementType X )
{Position p = L; /* p指向L的第1个结点 */while ( p && p->Data!=X )p = p->Next;/* 下列语句可以用 return p; 替换 */if ( p )return p;elsereturn ERROR;
}/* 带头结点的插入 */
/*注意:在插入位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是链表结点指针,在P之前插入新结点 */
bool Insert( List L, ElementType X, Position P )
{ /* 这里默认L有头结点 */Position tmp, pre;/* 查找P的前一个结点 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL ) { /* P所指的结点不在L中 */printf("插入位置参数错误\n");return false;}else { /* 找到了P的前一个结点pre *//* 在P前插入新结点 */tmp = (Position)malloc(sizeof(struct LNode)); /* 申请、填装结点 */tmp->Data = X; tmp->Next = P;pre->Next = tmp;return true;}
}/* 带头结点的删除 */
/*注意:在删除位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是拟删除结点指针 */
bool Delete( List L, Position P )
{ /* 这里默认L有头结点 */Position pre;/* 查找P的前一个结点 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL || P==NULL) { /* P所指的结点不在L中 */printf("删除位置参数错误\n");return false;}else { /* 找到了P的前一个结点pre *//* 将P位置的结点删除 */pre->Next = P->Next;free(P);return true;}
}
线性表的定义与操作-顺序表,链式表(C语言)相关推荐
- 队列的定义与操作-顺序存储,链式存储(C语言)
顺序存储: typedef int Position; struct QNode {ElementType *Data; /* 存储元素的数组 */Position Front, Rear; /* 队 ...
- 堆栈的定义与操作-顺序存储,链式存储(C语言)
顺序存储: typedef int Position; struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */in ...
- 6-5 链式表操作集 (20分)
本题要求实现链式表的操作集. 函数接口定义: Position Find( List L, ElementType X ); List Insert( List L, ElementType X, P ...
- 带头结点的链式表操作集
6-6 带头结点的链式表操作集 (20 分) 本题要求实现带头结点的链式表操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementTy ...
- 6-2 链式表的按序号查找
6-2 链式表的按序号查找 (10 分) 本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List ...
- 6-1 求链式表的表长
6-1 求链式表的表长 (10 分) 本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LN ...
- SCAU8579、SCAU8580、SCAU8581 链式表的基本操作
这篇文章是一份纯代码分享. 代码包含了线性表的链式实现时的基本函数,包括: CreateLinkList.DestroyLinkList.ClearLinkList.LinkListEmpty.Lin ...
- 6-1 求链式表的表长 (10 分)
本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; st ...
- c语言实现数据结构中的链式表
以下是我用c语言实现数据结构中的链式表 #pragma once; #ifndef _STDLIB_H #include <stdlib.h> #endif #ifndef _ELEMTY ...
最新文章
- fork是linux函数吗,linux fork()函数
- Verilog设计实例(7)基于Verilog的数字电子钟设计
- vue路由 routers的写法:require用与不用
- OpenGL中的Uniform block size 的大小限制
- 实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验
- mockito 静态_在Java 8中使用不带静态导入的Mockito
- oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例
- 反应器(Reactor):用于事件多路分离和分派的体系结构模式
- 强悍的命令行 —— 磁盘空间的查看与磁盘空间的释放
- 在centos下安装django
- WIN7下打开telnet工具
- ctfshow (ssrf学习和实践)
- k8s - Service ExternalName
- Dolphinscheduler/海豚调度器的安装
- 计量语言学软件Altmann-Fitter阿尔特曼拟合器的使用简介(更新中)
- win11 安装Ubuntu加可视化桌面(最新保姆级教程)
- R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理、使用ggplot2可视化预测值和实际值的曲线进行对比分析
- 2019计算机学院年会主持稿,2019年会的主持词
- 评估托管SDWAN服务
- 2023CUPT第四题彩色线思路与解法