顺序表:

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语言)相关推荐

  1. 队列的定义与操作-顺序存储,链式存储(C语言)

    顺序存储: typedef int Position; struct QNode {ElementType *Data; /* 存储元素的数组 */Position Front, Rear; /* 队 ...

  2. 堆栈的定义与操作-顺序存储,链式存储(C语言)

    顺序存储: typedef int Position; struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */in ...

  3. 6-5 链式表操作集 (20分)

    本题要求实现链式表的操作集. 函数接口定义: Position Find( List L, ElementType X ); List Insert( List L, ElementType X, P ...

  4. 带头结点的链式表操作集

    6-6 带头结点的链式表操作集 (20 分) 本题要求实现带头结点的链式表操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementTy ...

  5. 6-2 链式表的按序号查找

    6-2 链式表的按序号查找 (10 分) 本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List ...

  6. 6-1 求链式表的表长

    6-1 求链式表的表长 (10 分) 本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LN ...

  7. SCAU8579、SCAU8580、SCAU8581 链式表的基本操作

    这篇文章是一份纯代码分享. 代码包含了线性表的链式实现时的基本函数,包括: CreateLinkList.DestroyLinkList.ClearLinkList.LinkListEmpty.Lin ...

  8. 6-1 求链式表的表长 (10 分)

    本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; st ...

  9. c语言实现数据结构中的链式表

    以下是我用c语言实现数据结构中的链式表 #pragma once; #ifndef _STDLIB_H #include <stdlib.h> #endif #ifndef _ELEMTY ...

最新文章

  1. fork是linux函数吗,linux fork()函数
  2. Verilog设计实例(7)基于Verilog的数字电子钟设计
  3. vue路由 routers的写法:require用与不用
  4. OpenGL中的Uniform block size 的大小限制
  5. 实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验
  6. mockito 静态_在Java 8中使用不带静态导入的Mockito
  7. oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例
  8. 反应器(Reactor):用于事件多路分离和分派的体系结构模式
  9. 强悍的命令行 —— 磁盘空间的查看与磁盘空间的释放
  10. 在centos下安装django
  11. WIN7下打开telnet工具
  12. ctfshow (ssrf学习和实践)
  13. k8s - Service ExternalName
  14. Dolphinscheduler/海豚调度器的安装
  15. 计量语言学软件Altmann-Fitter阿尔特曼拟合器的使用简介(更新中)
  16. win11 安装Ubuntu加可视化桌面(最新保姆级教程)
  17. R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理、使用ggplot2可视化预测值和实际值的曲线进行对比分析
  18. 2019计算机学院年会主持稿,2019年会的主持词
  19. 评估托管SDWAN服务
  20. 2023CUPT第四题彩色线思路与解法

热门文章

  1. SQL一键备份用户数据库
  2. 【ArcGIS风暴】ArcGIS自动生成标识码(BSM)的两种方法案例教程
  3. 【ArcGIS风暴】根据海拔范围分级统计GIMMS 3g NDVI平均值案例教程——以甘肃省为例
  4. ArcGIS导入Sketchup模型
  5. Android之startService与bindService的区别
  6. ajax常见错误和使用总结
  7. linux进程上下文切换,Linux 性能分析总结之 CPU 上下文切换(二)
  8. 华为手机Android系统优缺点,第一次安卓机优缺点总结(对比iOS系统)
  9. 用台球杆击球,这个击球力道能传递到10米之外的球上吗?
  10. 为什么接吻需要闭眼睛?