说明:以下笔记中,代码全为伪代码,请自行阅读与理解。下一篇文章即将用一个小小的实验题来对文章内容进行验证和实现。

文章结尾将会放出实验题,可以先行思考。

第一章 线性表

2.1 线性表的定义和特点

定义:由n(n>=0)个数据特性相同的元素构成的元素构成的有限序列称为线性表。

线性表的个数n定义为线性表的程度,n=0时称为空表。

对于非空的线性表或者线性结构,其特点是:

(1)存在唯一的一个被称作“第一个”的数据元素。

(2)存在唯一的一个被称作“最后一个”的数据元素。

(3)除第一个以外,结构中的每个数据元素均只有一个前驱。

(4)除最后一个外,结构中的每个元素均只有一个后继。

2.2案例引入

一元多项式运算:数组表示的顺序储存结构。(书p19、p20)

稀疏多项式运算:采用链式储存结构表示多项式的有序序列(书p20)

图书信息管理系统:抽象成线性表,采用适当的存储结构来表示该线性表。

2.3线性表的类型定义

不需要背熟,因为背了根本没用,你应该掌握主要内容。

比如InitList(&L)操作结果:

构成一个空的线性表L;InitList是一个函数名,你也可以定义为IL,这个名字完全是你自己决定的,&L的L也是自己可以定义的,你可以定义为H,所以记住根本没实际作用,你要知道的是这个函数有什么功能,是怎样实现的?为什么L前面有个&?

2.4线性表的顺序表示和实现

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像。(逻辑上相邻的数据元素,其物理次序也是相邻的)

只要确定了存储线性表的起始位置,线性表中任意一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。

由于高级程序设计语言中的数组类型也有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序和存储结构。在此,由于线性表的长度可变,且所需最大存储空间随问题不同而不同,则在C语言中可用动态分配的一维数组表示线性表,描述如下:

//----顺序表的存储结构(伪代码)----

说明:

(1)数组空间通过后面算法2.1初始化动态分配得到,初始化完成后,数组指针elem指示顺序表的基地址,数组空间大小为MAXSIZE。

(2)元素类型定义中的ElemType数据类型是为了描述统一而自定的,在实际应用中用户可根据实际需要具体定义表中数据元素的数据类型,既可以是基本数据类型,如 int、float、char 等,也可以是构造数据类型,如struct结构体类型。

(3)length表示顺序表中当前数据元素的个数。因为C语言数组的下标是从0开始的,而位置序号是从1开始的,所以要注意区分元素的位置序号和该元素在数组中的下标位置之间的对应关系,数据元素的位置序号和该元素在数组中的下标位置之间的对应关系,数据元素 a1、a2、…… 、an 依次存放在数组 elem【0】、elem【1】、…… 、elem【Length-1】中。

顺序表中基本操作的实现:

1.初始化:

顺序表的初始化操作就是构造一个空的顺序表。

Status Init_SqList( SqList *L )
{  L->elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;
if ( !L -> elem_array ) return  ERROR ;
else {   L->length= 0 ;    return OK ;  }
}

2.取值:

取值操作时根据指定的位置序号i,获取顺序表中第i个数据元素的值。

由于顺序存储结构具有随机存取的特点,可以直接通过数组下标定位得到,elem【i -1】单元存储第i个数据元素。

实现步骤

(1) 将线性表L中的第i个至第n个结点后移一个位置。

(2) 将结点e插入到结点ai-1之后。

(3) 线性表长度加1。

Status Insert_SqList(Sqlist *L,int i ,ElemType e){
int j ;
if  ( i<0||i>L->length-1)   return  ERROR ;
if  (L->length>=MAX_SIZE)
{    printf(“线性表溢出!n”);  return  ERROR ;  }
for  ( j=L->length–1; j>=i-1; --j )
L->Elem_array[j+1]=L->Elem_array[j];
/*  i-1位置以后的所有结点后移  */
L->Elem_array[i-1]=e;    /*  在i-1位置插入结点  */
L->length++ ;
return  OK ;
}

3.查找:

查找操作是根据指定的元素值e,查找顺序表中第1个与e相等的元素。若查找成功,则返回该元素在表中的位置序号;若查找失败,则返回0.

Status  Locate_Delete_SqList(Sqlist *L,ElemType x)/*  删除线性表L中值为x的第一个结点  */
{  int  i=0 , k ;
while  (i<L->length)      /*查找值为x的第一个结点*/
{   if  (L->Elem_array[i]!=x )  i++ ;
else  {  for ( k=i+1; k< L->length; k++)L->Elem_array[k-1]=L->Elem_array[k]; L->length--;  break ; }
}
if  (i>L->length)
{    printf(“要删除的数据元素不存在!n”) ;
return ERROR ;  }
return  OK;
} 

4.插入:

在表的第i个位置插入一个新的数据元素e,使长度为n的线性表变成长度为n+1的线性表。

Status Insert_SqList(Sqlist *L,int i ,ElemType e){   int j ;
if  ( i<0||i>L->length-1)   return  ERROR ;
if  (L->length>=MAX_SIZE)
{    printf(“线性表溢出!n”);  return  ERROR ;  }
for  ( j=L->length–1; j>=i-1; --j )
L->Elem_array[j+1]=L->Elem_array[j];
/*  i-1位置以后的所有结点后移  */
L->Elem_array[i-1]=e;    /*  在i-1位置插入结点  */
L->length++ ;
r

5.删除

删除线性表的第i个数据元素,使线性表的长度减一。

实现步骤

(1) 将线性表L中的第i+1个至第n个结点依此向前移动一个位置。

(2) 线性表长度减1。

ElemType  Delete_SqList(Sqlist *L,int i)
{  int  k ;   ElemType  x ;
if  (L->length==0)
{  printf(“线性表L为空!n”); return ERROR;  }
else if ( i<1||i>L->length )
{  printf(“要删除的数据元素不存在!n”) ;
return ERROR ; }
else  {  x=L->Elem_array[i-1] ;   /*保存结点的值*/
for ( k=i ;  k<L->length ; k++) L->Elem_array[k-1]=L->Elem_array[k];/*  i位置以后的所有结点前移  */
L->length--;  return (x);
}
} 

实验:

1、随机产生n个100以内整数生成一个顺序存储的线性表, 并实现如下功能(用菜单实现,并加入开始画面和结束画面):

1. SORT(排序) 2. INSERT(插入) 3. DELETE(删除) 4. EXIT(退出

数据结构一元多项式求导_Joahua的数据结构笔记(二)相关推荐

  1. 数据结构_C语言_实验一_线性结构 ——一元多项式求导

    文章目录 实验一 线性结构 1. 实验目的 2. 实验内容 3. 实验要求 4. 实验过程 (1) 问题描述 (2) 数据结构与算法设计 (3) 程序实现 (4) 实验结果 (5) 实验总结 实验一 ...

  2. 浙江大学PAT上机题解析之1010. 一元多项式求导 (25)

    1010. 一元多项式求导 (25) 时间限制  400 ms 内存限制  32000 kB 代码长度限制  8000 B 判题程序    Standard 设计函数求一元多项式的导数. 输入格式:以 ...

  3. 1010. 一元多项式求导

    题目截图: 思路: 简单模拟. 代码: 1 /* 2 1010. 一元多项式求导 3 */ 4 5 #include <stdio.h> 6 #include <string.h&g ...

  4. 7-16 一元多项式求导 (20 分)(详解+题目分析)

    7-16 一元多项式求导 (20 分) 1:题目 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: ...

  5. C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)

    1010 一元多项式求导 (25分) 设计函数求一元多项式的导数.(注:x ​n ​​ (n为整数)的一阶导数为nx ​n−1 ​​ .) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值 ...

  6. 7-1 一元多项式求导 (10 分)

    7-1 一元多项式求导 (10 分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入相同 ...

  7. 7-172 一元多项式求导 (20 分)

    7-172 一元多项式求导 (20 分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入 ...

  8. PTA5-16 一元多项式求导 (20分)

    5-16 一元多项式求导   (20分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入 ...

  9. PAT (Basic Level) Practice1010 一元多项式求导

    1010 一元多项式求导 一.题目 设计函数求一元多项式的导数.(注:xnx^nxn(n为整数)的一阶导数为nxn−1nx^{n-1}nxn−1) 二.输入输出 输入格式 以指数递降方式输入多项式非零 ...

最新文章

  1. python如何调用文件进行换位加密_数据文件加密算法–换位加密法 | 学步园
  2. vc6工程转成vs2008的一个问题【WINVER not defined】
  3. 自动阈值检测_金融科技讲堂之三|金融企业如何在大数据中进行异常检测(一)...
  4. VTK:InfoVis之PKMeansClustering
  5. java竖线分割_Java String类的Split以竖线作为分隔符
  6. Python基础十四——内置函数和匿名函数
  7. 语言写贪吃蛇墙角符号_从零基础到拥抱人工智能,您的孩子可能就差一个贪吃蛇游戏...
  8. 测试方法之JUnit单元测试
  9. 摘录:《晨间日记的奇迹》
  10. 快速掌握PS通道抠头发“七步法”
  11. 港澳台、大陆身份证正则表达式
  12. 实现iOS系统相机九宫格滤镜的思路
  13. Excel如何将姓名转为拼音并将姓和名分开显示
  14. android高德SDK无法定位,高德地图 getLocation无法定位的问题
  15. 基于网络特征的新型授权机制设想
  16. SQLServer CONCAT函数
  17. cloc工具 linux,Linux下源代码行数统计工具(sloccount, cloc等)
  18. ualarm()函数调用失败以及浅析
  19. 挖煤矿小程序又出新功能了
  20. 情人,就是彼岸那朵花

热门文章

  1. 专科python应届生工资多少-请问学过一点python,应届生怎么找工作?
  2. 编程语言python怎么读-网红编程语言Python将纳入高考你怎么看?
  3. python教程视频哪个好-python视频教程哪家好
  4. python用什么来写模块-Python 3.1 用C写模块 扩展(序)
  5. python基础代码大全-【01】Python基础入门 (全)
  6. python从入门到精通需要多久--零基础学Python,从入门到精通需要多长时间
  7. python菜鸟教程100例-Python 基础教程 | 菜鸟教程
  8. GitHub - ErnestChen1/SmartSpeaker: 一个基于云端语音识别的智能控制设备,类似于天猫精灵,小爱同学。采用的芯片为stm32f407,wm8978,esp8266。...
  9. 视频帧率对人眼主观感受的影响 2
  10. 熊海博客php版本,熊海CMS xhcms v1.0代码审计