线性表的基本运算(C实现)

线性表的基本运算(C实现)
线性表的基本运算(C实现)

线性表的基本运算(C实现)

源代码部分

/*顺序表的基本运算*/

#include

#define Maxsize 100

typedef struct

{

int num; /*学号*/

char name[8]; /*姓名*/

char sex[3]; /*性别*/

int age; /*年龄*/

int score; /*成绩*/

}Datatype;

typedef struct

{

Datatype data[Maxsize]; /*存放数据的数组*/

int length; /*顺序表的实际长度*/

}Seqlist;

Create(Seqlist *L,int n) /*录入学生信息*/

{

int i=0;

if(n>Maxsize)

printf("超出顺序表大小:%d",Maxsize);

else

while(i

{

printf("请输入第%d个学生的信息:\n",i+1);

scanf("%d",&L->data[i].num);

scanf("%s",L->data[i].name);

scanf("%s",&L->data[i].sex);

scanf("%d",&L->data[i].age);

scanf("%d",&L->data[i].score);

i++;

}

L->length=n;

}

Display(Seqlist *L) /*输出学生信息*/

{

int i=0,len=L->length;

while(i

{

printf("第%d个学生num:%d\n",i+1,L->data[i].num);

printf("第%d个学生name:%s\n",i+1,L->data[i].name);

printf("第%d个学生sex:%s\n",i+1,L->data[i].sex);

printf("第%d个学生age:%d\n",i+1,L->data[i].age);

printf("第%d个学生score:%d\n",i+1,L->data[i].score);

i++;

printf("\n");

}

}

Insert(Seqlist *L,Datatype x,int i) /*将元素x插入到顺序表L的第i个数据元素之前*/

{

int j;

if(L->length==Maxsize)

{

printf("表已满!\n");

exit(0);

}

if(i<1||i>L->length+1) /*检查插入位置是否合法*/

{

printf("位置错!\n");

exit(0);

}

for(j=L->length;j>=i;j--) /*初始化i=L.length*/

L->data[j]=L->data[j-1]; /*依次后移*/

L->data[i-1]=x; /*元素x置入到下标为i-1的位置*/

L->length++; /*表长度加1*/

}

Locate(Seqlist *L,int x) /*查找出线性表L中值等于x的结点序号最小值*/

{

int i=0;

while((ilength)&&(L->data[i].num!=x)) /*在顺序表中查找值为x的结点*/ i++;

if(ilength)

{

printf("该学生的位置为:%d\n",i+1);/*若找到值为x的元素,返回元素的序号。*/

printf("该学生的num:%d\n",L->data[i].num);

printf("该学生的name:%s\n",L->data[i].name);

printf("该学生的sex:%s\n",L->data[i].sex);

printf("该学生的age:%d\n",L->data[i].age);

printf("该学生的score:%d\n",L->data[i].score);

printf("\n");

}

else printf("未找到该学生!\n"); /*未找到值为x的元素,返回0。*/

}

Delete(Seqlist *L,int i) /*删除线性表L中的第i个数据结点*/

{

int j;

if(i<1||i>L->length) /*检查位置是否合法*/ {

printf("非法位置!\n");

exit(0);

}

for(j=i;jlength;j++) /*第i个元素的下标为i-1*/ L->data[j-1]=L->data[j]; /*依次左移*/ L->length--; /*表长度减1*/

}

main()

{

Seqlist student;

Datatype x;

int i;

printf("请输入学生信息的个数:\n",i);

scanf("%d",&i);

printf("创建学生信息表:\n");

Create(&student,i);

Display(&student);

printf("在当前位置插入一个学生:\n");

scanf("%d",&i);

printf("输入学生信息:\n");

scanf("%d",&x.num);

scanf("%s",https://www.360docs.net/doc/cf17882134.html,);

scanf("%s",x.sex);

scanf("%d",&x.age);

scanf("%d",&x.score);

Insert(&student,x,i);

printf("------添加学生后的学生档案信息------\n");

Display(&student);

printf("输入一个学号查找在顺序表中该学生的位置:\n");

scanf("%d",&i);

Locate(&student,i);

printf("删除该位置学生信息:\n");

scanf("%d",&i);

Delete(&student,i);

printf("------删除后的学生档案信息------\n");

Display(&student);

}

实验结果

线性表顺序存储结构上的基本运算

实验项目名称:线性表的顺序存储结构上的基本运算 (所属课程:数据结构--用C语言描述) 院系:计算机科学与信息工程学院专业班级:网络工程 姓名:000000 学号:0000000000 实验日期:2016.10.20 实验地点:A-06 406 合作者:指导教师:孙高飞 本实验项目成绩:教师签字:日期: (以下为实验报告正文) 一、实验目的 本次实验的目的掌握顺序表的存储结构形式及其描述和基本运算的实现;掌握动 态链表结构及相关算法设计 实验要求:输入和验证程序例题。正确调试程序,记录程序运行结果。完成实验报 告。 二、实验条件 Windows7系统的电脑,vc++6.0软件,书本《数据结构--用c语言描述》 三、实验内容 3.1 根据41页代码,用c语言定义线性表的顺序存储结构。 3.2 根据42页算法2.1实现顺序表的按内容查找。 3.3 根据43页算法2.2实现顺序表的插入运算。 3.4 根据45页算法2.3实现顺序表的删除运算。 四、实验步骤 3.2实验步骤 (1)编写头文件,创建ElemType。 (2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。

(3)根据42页算法2.1实现顺序表的按内容查找,创建Locate函数。 (4)创建main函数,输入SeqList L的数据元素。 (5)输入要查找的数据元素的值,调用Locate函数,输出结果。 3.3实验步骤 (1)编写头文件,创建ElemType。 (2)根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。 (3)根据43页算法2.2实现顺序表的插入运算,创建InsList函数。 (4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。 (5)创建main函数,输入插入的元素和其位置,调用printLinst函数输出顺序表,调用IntList函数,再次调用printLinst函数输出顺序表。 3.4实验步骤 (1)编写头文件,创建ElemType。 (2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。 (3)根据45页算法2.3实现顺序表的删除运算,创建DelList函数。 (4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。 (5)创建main函数,输入删除元素的位置,调用printLinst函数输出顺序表,调用DelList函数,再次调用printLinst函数输出顺序表。 五、实验结果 (1)实验3.2顺序表的按内容查找 # include typedef int Elemtype; typedef struct{ Elemtype elem[100]; int last; }SeqList; int Locate(SeqList L,Elemtype e){ int i; i=0;

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

201560140140--袁若飞--实验1:线性表的基本操作及其应用

数据结构 实验1:线性表的基本操作及其应用 班级:RB软工移151 学号:201560140140 姓名:袁若飞

实验一线性表 一、实验目的 1、帮助读者复习C++语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,题目一、二是必做题。题目三、题目四选作。 三、实验准备知识 1、请简述线性表的基本特性和线性表的几种基本操作的机制 ①答:线性表的基本特性是:对线性表中某个元素ai来说,称其前面的元素ai-1为ai的直接前驱,称其后前面的元素ai+1为ai的直接后继。显然,线性表中每个元素最多有一个直接前驱和一个直接后继。 ②答:线性表的几种基本操作的机制有六个: (1)初始化线性表initial_List(L)——建立线性表的初始结构,即建空表。这也是各种结构都可能要用的运算。 (2)求表长度List_length(L)——即求表中的元素个数。 (3)按序号取元素get_element(L,i)——取出表中序号为i的元素。(4)按值查询List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。 (5)插入元素List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。(6)删除元素List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。 2、掌握线性表的逻辑结构。 3、掌握线性表的链式存储结构。 4、熟练掌握线性表的插入、删除等操作。

线性表的基本操作

Status initlist_sq(sqlist &L)//构造一个空的线性表L { L.elem=(elemtype *)malloc(list_init_size * sizeof(elemtype)); if(!L.elem)exit(OVERFLOW); L.length=0; L.listsize= list_init_size; return OK; }//initlist_sq Status destroylist_sq(sqlist &L)//销毁线性表L { L.length=0; L.listsize=0; free(L.elem); return OK; }//destroylist_sq Status clearlist_sq(sqlist &L)//将线性表L重置为空表 { L.length=0; return OK; }//clearlist_sq Status listempty_sq(sqlist L)//判断线性表L是否为空表,是返回TRUE,否返回FALSE { if(L.length==0) return TRUE; else return FALSE; }//listempty_sq Status listlength_sq(sqlist L)//返回线性表L中数据元素个数 { return 0; }//listlength_sq Status getelem_sq(sqlist L,int i,elemtype &e)//用e返回L中的第i个数据元素的值{ e=L.elem[i-1]; return OK;

}//getelem_sq Status locateelem_sq(sqlist L,elemtype e,compare())//在顺序线性表L中查找第1个值与e满足compare()的元素的位序 //若找到,则返回其在L中的位序,否则返回0 { int i=1; elemtype *p=L.elem; while(i<=L.length && !(*compare)(*p++,e)) ++i; if(i<=L.length) return i; else return 0; }//locateelem_sq Status priorelem_sq(sqlist L,elemtype cur_e,elemtype &pre_e) //若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱, //否则操作失败,pre_e无定义 { int i=1; elemtype *p; p=L.elem; for(i=1;i<=L.length;i++) { if((*p++==cur_e) && i!=1) pre_e=L.length[i-1]; else return ERROR; } return OK; }//priorelem_sq Status nextelem_sq(sqlist L,elemtype cur_e,elemtype &next_e) //若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继, //否则操作失败,next_e无定义 { int i=1; elemtype *p; p=L.elem; for(i=1;i<=L.length;i++)

线性代数基本定理-新版.pdf

线性代数基本定理一、矩阵的运算 1.不可逆矩阵的运算不满足消去律AB=O,A 也可以不等于 O 11-1-1?è???÷1-1-11?è???÷=0000?è?? ? ÷ 2.矩阵不可交换 (A+B)2=A 2+AB+BA+B 2 (AB)k =ABABABAB ...A B 3.常被忽略的矩阵运算规则 (A+B)T =A T +B T (l A)T =l A T

4.反称矩阵对角线元素全为0 4.矩阵逆运算的简便运算 (diag(a 1,a 2 ,...,a n ))-1=diag( 1 a 1 , 1 a 2 ,..., 1 a n ) (kA)-1=1 k A-1 方法 1.特殊矩阵的乘法 A.对角矩阵乘以对角矩阵,结果仍为对角矩阵。且: B.上三角矩阵乘以上三角矩阵,结果为上三角矩阵2.矩阵等价的判断 A@B?R(A)=R(B) 任何矩阵等价于其标准型

3.左乘初等矩阵为行变换,右乘初等矩阵为列变换如:m*n 的矩阵,左乘 m 阶为行变换,右乘 n 阶为列变换 4. 给矩阵多项式求矩阵的逆或证明某个矩阵可逆如:A 2 -A-2I =O ,证明(A+2I)可逆。把2I 项挪到等式右边,左边凑出含有 A+2I 的一个多项式, 在确保A 平方项与 A 项的系数分别为原式的系数情况下,看I 项多加或少加了几个。5.矩阵的分块进行计算加法:分块方法完全相同 矩阵乘法(以A*B 为例):A 的列的分法要与B 行的分法一 致,如: 如红线所示:左边矩阵列分块在第 2列与第3列之间,那么,右边矩阵分 块在第二行与第三行之间 1-1003-1000100002-1 é? êêêêù?úúúú1000-1000013-1021 4 é? ê êêêù? úúúú

实现顺序表各种基本运算的算法

实现顺序表各种基本运算的算法 要求:编写一个程序(algo2_1.cpp)实现顺序表的各种基本操作,并在此基础上设计一个主程序(exp2_1.cpp)完成如下功能: (1)初始化顺序表L (2)依次采用尾插法插入a,b,c,d,e元素 (3)输出顺序表L (4)输出顺序表L的长度 (5)判断顺序表L是否为空 (6)输出顺序表L的第3个元素 (7)输出元素a的位置 (8)在第4个元素位置上插入f元素 (9)输出顺序表L (10)删除L的第3个元素 (11)输出顺序表L (12)释放顺序表L /*文件名:exp2-1.cpp*/ #include #include #define MaxSize 50 typedef char ElemType; typedef struct { ElemType elem[MaxSize]; int length; } SqList; extern void InitList(SqList *&L); extern void DestroyList(SqList *L); extern int ListEmpty(SqList *L); extern int ListLength(SqList *L); extern void DispList(SqList *L); extern int GetElem(SqList *L,int i,ElemType &e); extern int LocateElem(SqList *L, ElemType e); extern int ListInsert(SqList *&L,int i,ElemType e); extern int ListDelete(SqList *&L,int i,ElemType &e); void main() { SqList *L; ElemType e; printf("(1)初始化顺序表L\n"); InitList(L); printf("(2)依次采用尾插法插入a,b,c,d,e元素\n"); ListInsert(L,1,'a'); ListInsert(L,2,'b');

实验一 线性表的基本操作

实验一线性表的基本操作 一、实验目的 1. 熟悉C/C++语言上机环境; 2. 掌握线性表的基本操作:查找、插入、删除等运算在顺序存储、链式存储结构上的运算。 二、实验环境 1. 装有Visual C++6.0的计算机。 2. 本次实验共计2学时。 三、实验内容 1. 建立顺序表,基本操作包括:初始化、建立顺序表、输出顺序表、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 2. 设有两个非递增有序的线性表A和B,均已顺序表作为存储结构。编写算法实现将A表和B表合并成一个非递增有序排列的线性表(可将线性表B插入线性表A中,或重新创建线性表C)。 3. 建立单链表,基本操作包括:初始化、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 四、源程序 #include #include #include #define MaxSize 50 typedef char ElemType; //-------存储结构---------- typedef struct { ElemType elem[MaxSize]; //存放顺序表中的元素 int length; //存放顺序表的长度 } SqList; //-------初始化线性表---------- void InitList(SqList *&L) //初始化线性表,构造一个空的线性表,并将长度设置为0 { L=(SqList *)malloc(sizeof(SqList)); L->length=0;

实现顺序表的各种基本运算

实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化顺序表; 2、顺序表的插入; 3、顺序表的输出; 4、求顺序表的长度 5、判断顺序表是否为空; 6、输出顺序表的第i位置的个元素; 7、在顺序表中查找一个给定元素在表中的位置; 8、顺序表的删除;9、释放顺序表 三、算法思想与算法描述简图

四、实验步骤与算法实现 #include<> #include<> #define MaxSize 50 typedef char ElemType; typedef struct {ElemType data[MaxSize]; int length; }SqList;//顺序表类型的定义 void InitList(SqList*&L)//初始化顺序表L {L=(SqList*)malloc(sizeof(SqList)); L->length=0; } void DestroyList(SqList*&L)//释放顺序表L {free(L); } int ListEmpty(SqList*L)//判断顺序表L是否为空集{return(L->length==0); } int Listlength(SqList*L)//返回顺序表L的元素个数{return(L->length); } void DispList(SqList*L)//输出顺序表L {int i; if(ListEmpty(L))return; for(i=0;ilength;i++) printf("%c",L->data[i]);

线性表的基本操作实验报告

实验一:线性表的基本操作 【实验目的】 学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。 【实验内容】 1.顺序表的实践 1) 建立4个元素的顺序表s=sqlist[]={1,2,3,4,5},实现顺序表建立 的基本操作。 2) 在sqlist []={1,2,3,4,5}的元素4和5之间插入一个元素9,实现 顺序表插入的基本操作。 3) 在sqlist []={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9, 实现顺序表的删除的基本操作。 2.单链表的实践 3.1) 建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链 表建立的基本操作。 2) 将该单链表的所有元素显示出来。 3) 在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插 入的基本操作。 4) 在一个包括头结点和5个结点的(5,4,3,2,1)的单链表的指定位置 (如i=2)删除一个结点,实现单链表删除的基本操作。 5) 实现单链表的求表长操作。 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了刚创

建的工程之中。 4.写好代码 5.编译->链接->调试 1、#include "stdio.h" #include "malloc.h" #define OK 1 #define OVERFLOW -2 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int ElemType; typedef int Status; typedef struct { ElemType *elem; int length; int listsize; } SqList; Status InitList( SqList &L ) { int i,n; L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof (ElemType)); if (!L.elem) return(OVERFLOW); printf("输入元素的个数:"); scanf("%d",&n); printf("输入各元素的值:"); for(i=0;i

线性表的基本操作讲解

实验二线性表的基本操作 一、实验目的 1.掌握用C++/C语言调试程序的基本方法。 2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。 二、实验要求 1.C++/C完成算法设计和程序设计并上机调试通过。 2.撰写实验报告,提供实验结果和数据。 3.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。 三、实验内容: 1. 分析并运行以下各子程序的主要功能。 程序1:顺序存储的线性表和运算 #include #define MAXSIZE 100 int list[MAXSIZE]; int n; /*insert in a seqlist*/ int sq_insert(int list[], int *p_n, int i, int x) {int j; if (i<0 || i>*p_n) return(1); if (*p_n==MAXSIZE) return(2); for (j=*p_n+1; j>i; j--) list[j]=list[j-1]; list[i]=x; (*p_n)++; return(0); } /*delete in a seq list*/ int sq_delete(int list[], int *p_n, int i) {int j; if (i<0 || i>=*p_n) return(1); for (j = i+1; j<=*p_n; j++) list[j-1] = list[j]; (*p_n)--; return(0); } void main() {int i,x,temp; printf("please input the number for n\n"); printf("n="); scanf("%d",&n); for (i=0; i<=n; i++) {printf("list[%d]=",i); scanf("%d",&list[i]);}

实验一 顺序存储线性表的基本运算

实验一VC++软件的熟悉与使用 一、实验目的 1、熟悉VC++控制台程序的建立、编辑、编译、运行步骤。 2、熟悉VC++环境下调试的基本方法。 二、实验原理 在VC++6.0 下建立、编译、调试并运行一个控制台程序,程序的功能描述是:有n个人(1≤n≤100)围成一圈,顺序排号(1~n)。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,余下的人继续报数,编写程序,实现按退出圈子的先后顺序输出这个序列。程序源代码如下: #include #include void main( ) { int i,k,m,n,number[100],*p; printf(“input count of person:n=”); scanf(“%d”,&n); if(n>100) { printf(“error\n”); exit (0); } p=number; for(i=0;i

{ if(*(p+i)!=0) k++; if(k==5) { printf(“%d:%d->”,m+1,*(p+i)); *(p+i)=0; k=0; m++; if(m%8==0) printf(“\n”); } i++; if (i==n) i=0; } while(*p==0) p++; printf(“%d:%d”,m+1,*p); } 三、实验仪器和设备 1、PC微机 2、Microsoft VC++6.0 四、预习要求 1、根据源程序,画出流程图。 2、C语言源程序的编写方法。 五、实验内容及步骤 1、编写一个控制台程序 在VC++6.0 下建立、编译并运行一个控制台程序,程序的功能描述是:有n个人(1≤n≤100)围成一圈,顺序排号(1~n)。从第一个人开始报数(从1到5报数),凡到5的人退出圈子,余下的人继续报数,编写程序,实现按退出

线性代数知识点总结

《线性代数》复习提纲第一部分:基本要求(计算方面) 四阶行列式的计算; N阶特殊行列式的计算(如有行和、列和相等); 矩阵的运算(包括加、减、数乘、乘法、转置、逆等的混合运算); 求矩阵的秩、逆(两种方法);解矩阵方程; 含参数的线性方程组解的情况的讨论; 齐次、非齐次线性方程组的求解(包括唯一、无穷多解); 讨论一个向量能否用和向量组线性表示; 讨论或证明向量组的相关性; 求向量组的极大无关组,并将多余向量用极大无关组线性表示; 将无关组正交化、单位化; 求方阵的特征值和特征向量; 讨论方阵能否对角化,如能,要能写出相似变换的矩阵及对角阵; 通过正交相似变换(正交矩阵)将对称矩阵对角化; 写出二次型的矩阵,并将二次型标准化,写出变换矩阵; 判定二次型或对称矩阵的正定性。 第二部分:基本知识 一、行列式 1.行列式的定义 用n^2个元素aij组成的记号称为n阶行列式。 (1)它表示所有可能的取自不同行不同列的n个元素乘积的代数和; (2)展开式共有n!项,其中符号正负各半; 2.行列式的计算 一阶|α|=α行列式,二、三阶行列式有对角线法则; N阶(n>=3)行列式的计算:降阶法 定理:n阶行列式的值等于它的任意一行(列)的各元素与其对应的代数余子式乘积的和。

方法:选取比较简单的一行(列),保保留一个非零元素,其余元素化为0,利用定理展开降阶。 特殊情况 上、下三角形行列式、对角形行列式的值等于主对角线上元素的乘积; (2)行列式值为0的几种情况: Ⅰ行列式某行(列)元素全为0; Ⅱ行列式某行(列)的对应元素相同; Ⅲ行列式某行(列)的元素对应成比例; Ⅳ奇数阶的反对称行列式。 二.矩阵 1.矩阵的基本概念(表示符号、一些特殊矩阵――如单位矩阵、对角、对称矩阵等); 2.矩阵的运算 (1)加减、数乘、乘法运算的条件、结果; (2)关于乘法的几个结论: ①矩阵乘法一般不满足交换律(若AB=BA,称A、B是可交换矩阵); ②矩阵乘法一般不满足消去律、零因式不存在; ③若A、B为同阶方阵,则|AB|=|A|*|B|; ④|kA|=k^n|A| 3.矩阵的秩 (1)定义非零子式的最大阶数称为矩阵的秩; (2)秩的求法一般不用定义求,而用下面结论: 矩阵的初等变换不改变矩阵的秩;阶梯形矩阵的秩等于非零行的个数(每行的第一个非零元所在列,从此元开始往下全为0的矩阵称为行阶梯阵)。 求秩:利用初等变换将矩阵化为阶梯阵得秩。 4.逆矩阵 (1)定义:A、B为n阶方阵,若AB=BA=I,称A可逆,B是A的逆矩阵(满足半边也成立); (2)性质:(AB)^-1=(B^-1)*(A^-1),(A')^-1=(A^-1)';(A B的逆矩阵,你懂的)(注意顺序)

顺序表的建立及其基本操作技巧

山东师范大学 实验报告 课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达 学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及基本运算 二、实验环境 Windows10,Visual Studio 2017 三、实验内容及实施 实验内容 1、建立一个顺序表,输入n个元素并输出; 2、查找线性表中的最大元素并输出; 3、在线性表的第i个元素前插入一个正整数x; 4、删除线性表中的第j个元素; 5、将线性表中的元素按升序排列; 【程序流程图】

【程序】 #include #include using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct { //定义顺序表结构 int data[MAXSIZE]; //存储空间的基地址; int length; //当前表长 }SqList; int InitList(SqList &L) //初始化顺序表 { L.length = 0; //当前长度为0 return OK; } void ShowList(SqList &L) //显示顺序表 { cout << "您构建的顺序表为:" << endl; //提示int i; for (i = 0; i < L.length; i++) { cout << L.data[i] << " ";

线性代数的基本运算

111 第5章 线性代数的基本运算 本章学习的主要目的: 1 复习线性代数中有关行列式、矩阵、矩阵初等变换、向量的线性相关性、线性方程组的求解、相似矩阵及二次型的相关知识. 2学会用MatLab 软件进行行列式的计算、矩阵的基本运算、矩阵初等变换、向量的线性相关性的判别、线性方程组的求解、二次型化标准形的运算. 5.1 行列式 5.1.1 n 阶行列式定义 由2n 个元素),,2,1,(n j i a ij 组成的记号 D=nn n n n n a a a a a a a a a 212222111211 称为n 阶行列式.其值是所有取自不同行不同列的n 个元素的乘积n np 2p 21p 1a a a 的代数和,各项的符号由n 级排列n p p p 21决定,即

112 D= ∑ -n p p p n p p p 21n np 2 p 21 p 1) 21( a a a )1(τ, 其中 ∑n p p p 21表示对所有n 级排列求和, ) ,,,(21n p p p τ是排列 n p p p 21的逆序数. 5.1.2 行列式的性质 (1) 行列式与它的转置行列式相等. (2) 互换行列式的两行(列),行列式变号. (3) 若行列式有两行(列)完全相同,则此行列式为零. (4) 行列式的某一行(列)中所有的元素都乘以同一数k,等于用数k 乘此行列式. (5) 若行列式有两行(列)元素成比例,则此行列式为零. (6) 若行列式的某一列(行)的元素是两数的和,则此行列式等 于对应两个行列式之和.即 nn n n ni n n i i nn n n ni n n i i nn n n ni ni n n i i i i a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a 21'2 1 '22221 '11211212 1 22221 112 1121'2 1 '222221'111211+ =+++ (7) 若行列式的某一行(列)的各元素乘以同一数加到另一行(列)对应的元素上去,行列式不变.

实验二 SQL Server 数据表的基本操作与查询

实验二SQL Server数据表的基本操作 一、实验目的 1.掌握创建数据库和表的操作。 2.熟悉SQL Server查询分析器环境。 3.掌握基本的SELECT查询及其相关子句的使用。 4.掌握复杂的SELECT查询,如多表查询、子查询、连接和联合查询。 二、实验内容 1.创建XSCJ数据库。 2.在XSCJ数据库中创建学生情况表XSQK,课程表KC,学生成绩表XS_KC。 3.在XSQK、KC、XS_KC表中输入数据。 4.启动SQL Server 2000 查询分析器环境。 5.涉及多表的简单查询。 6.涉及多表的复杂查询。 三、实验步骤 1.创建SQL SERVER数据库与数据表 1) 创建XSCJ数据库。 2) 打开创建的 XSCJ数据库,并在“SQL Server Enterprise Mananger” 窗口的右边窗口中选择“表”对象。 3) 选择“操作”菜单中的“新建表”命令,打开SQL Server的表编辑器 窗口。 4) 根据表2-1所示的表结构增加新列。 5) 点击快捷工具栏上的保存快捷按钮,在弹出的“选择名称”对话框中 输入表名XSQK,然后单击“确定”按钮,关闭表编辑器窗口,完成新 表的创建。 6) 打开“表”对象,在“SQL Server Enterprise Manager”窗口的右边 窗口中选择刚才创建的“XSQK”表。 7) 选择“操作”菜单中的“打开表”子菜单下的“返回所有行”命令, 打开表的数据记录窗口。

8) 输入的学生情况数据记录见表2-2。 表2-2 学生情况记录 9) 用同样方法创建课程表KC,表的结构见表2-3所示,表的内容见表2-4 所示。 表2-4 课程表记录 10)创建成绩表XS_KC,表的结构见表2-5所示,表的内容见表2-6所 示。

数据结构-实验报告顺序表基本运算

(封面) 学生实验报告 学院:国际经贸学院 课程名称:数据结构 专业班级: 09电子商务 姓名: 学号:

学生实验报告 (经管类专业用) 一、实验目的及要求: 1、目的 通过实验,实现顺序表的各种基本运算。 2、内容及要求 编写一个程序,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成下列功能: (1) 初始化顺序表L (2) 依次采用尾插法插入a,b,c,d,e (3) 输出顺序表L (4) 输出顺序表L长度; (5) 判断顺序表L是否为空; (6) 判断顺序表L 的第3个元素; (7) 输出元素‘a’的位置; (8) 在第4个元素位置上插入‘f’元素; (9) 输出顺序表L (10) 删除L的第3个元素; (11) 输出顺序表L (12) 释放顺序表L 二、仪器用具:

三、实验方法与步骤: 一、查阅顺序表等相关资料,熟悉顺序表基本概念和流程 二、“开展”顺序表实验流程 三、整理实验数据和文档,总结实验的过程,编写实验报告 四、实验结果与数据处理: 1、顺序表的代码: #include #include #define MaxSize 50 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int length; } SqList; void InitList(SqList *&L) { L=(SqList *)malloc(sizeof(SqList)); L->length=0; } void DestroyList(SqList *L) { free(L); } int ListEmpty(SqList *L) { return(L->length==0); } int ListLength(SqList *L) { return(L->length); }

数据结构--线性表的基本运算及多项式的算术运算

数据结构:线性表的基本运算及多项式的算术运算 一、实验目的和要求 实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。 要求: 能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。 二、实验环境(实验设备) X64架构计算机一台,Windows 7操作系统, IDE: Dev C++ 5.11 编译器: gcc 4.9.2 64bit 二、实验原理及内容 程序一:实现顺序表和单链表的实现 本程序包含了四个文件,分别是LinearListMain.cpp,linearlist.h,seqlist.h,singlelist.h。分别是主程序,线性表抽象类,顺序储存线性表的实现,链表储存顺序表的实现。 文件之间的关系图:

本程序一共包含了三个类:分别是LinearList(线性表抽象类),SeqList(顺序储存的线性表),SingleList(链表储存的线性表)。类与类之间的关系图如下: 其实,抽象类LinearList规定了公共接口。分别派生了SeqList类和SingleList。

SingleList类与SingleList类分别实现了LinearList类中的所有接口。 程序代码以及分析: Linearlist类: #include using namespace std; template class LinearList { protected: int n; //线性表的长度 public: virtual bool IsEmpty() const=0; //判读是否是空线性表 virtual int Length() const=0; //返回长度 virtual bool Find(int i,T& x) const=0; //将下标为i的元素储存在x中,成功返回true,否则返回false virtual int Search(T x) const=0; //寻找值是x的元素,找到返回true,否则返回false virtual bool Insert(int i,T x)=0; //在下标为i的元素后面插入x

线性代数知识点总结

第一部分:基本要求(计算方面) 四阶行列式的计算; N阶特殊行列式的计算(如有行和、列和相等); 矩阵的运算(包括加、减、数乘、乘法、转置、逆等的混合运算); 求矩阵的秩、逆(两种方法);解矩阵方程; 含参数的线性方程组解的情况的讨论; 齐次、非齐次线性方程组的求解(包括唯一、无穷多解); 讨论一个向量能否用和向量组线性表示; 讨论或证明向量组的相关性; 求向量组的极大无关组,并将多余向量用极大无关组线性表示; 将无关组正交化、单位化; 求方阵的特征值和特征向量; 讨论方阵能否对角化,如能,要能写出相似变换的矩阵及对角阵; 通过正交相似变换(正交矩阵)将对称矩阵对角化; 写出二次型的矩阵,并将二次型标准化,写出变换矩阵; 判定二次型或对称矩阵的正定性。 第二部分:基本知识 一、行列式 1.行列式的定义 用n^2个元素aij组成的记号称为n阶行列式。 (1)它表示所有可能的取自不同行不同列的n个元素乘积的代数和; (2)展开式共有n!项,其中符号正负各半; 2.行列式的计算 一阶|α|=α行列式,二、三阶行列式有对角线法则; N阶(n>=3)行列式的计算:降阶法 定理:n阶行列式的值等于它的任意一行(列)的各元素与其对应的代数余子式乘积的和。 方法:选取比较简单的一行(列),保保留一个非零元素,其余元素化为0,利用定理展开降阶。 特殊情况 上、下三角形行列式、对角形行列式的值等于主对角线上元素的乘积; (2)行列式值为0的几种情况: Ⅰ行列式某行(列)元素全为0; Ⅱ行列式某行(列)的对应元素相同; Ⅲ行列式某行(列)的元素对应成比例; Ⅳ奇数阶的反对称行列式。 二.矩阵 1.矩阵的基本概念(表示符号、一些特殊矩阵――如单位矩阵、对角、对称矩阵等); 2.矩阵的运算 (1)加减、数乘、乘法运算的条件、结果; (2)关于乘法的几个结论: ①矩阵乘法一般不满足交换律(若AB=BA,称A、B是可交换矩阵); ②矩阵乘法一般不满足消去律、零因式不存在;

对线性表的基本操作

#include "stdio.h" #include "malloc.h" #include "SequenList.h" #define OK 1 #define ERROR 0 int insList(SeqList *L, dataType x, int i,int j) { //在此写上插入操作的程序段 if (i<1||i>L->last+1)return 0; if ((L->last)==MAXSIZE) return 0; for (j=L->last;j>=i-1;j--) L->data[j+1]=L->data[j]; L->data[i-1]=x; ++L->last; return 1; } //************************************************************************** //函数delList():删除线性表L的第i个元素 //输入参数:L--线性表;i--被删元素的位置(从1开始计数) //************************************************************************** int delList(SeqList *L, dataType x,int i,int j) { if ((i<1)||(i>L->last+1)) return 0; x=L->data[i-1]; for(j=i;j<=L->last;j++) L->data[j-1]=L->data[j]; --L->last; return 1; //在此写上删除操作的程序段 } //************************************************************************** //函数createList():建立顺序表,其元素为整数 //************************************************************************** void createList(SeqList *L) { int n, i; printf("请输入数据的个数:"); scanf("%d", &n); printf("请输入%d个整数(用空格分开):", n);

实验一 顺序表的基本运算

实验一顺序表的基本运算 1、实验目的 掌握顺序表的基本操作,初始化、插入、删除以及显示等运算在顺序存储结构上的实现。 2、实验内容 (1)顺序表的初始化; (2)顺序表插入算法的实现; (3)顺序表删除算法的实现; (4)显示顺序表中各个元素; (5)顺序表清空算法的实现; (6)顺序表判空算法的实现; (7)求顺序表长度算法的实现; (8)求顺序表中一个元素前驱算法的实现; (9)求顺序表中一个元素后继算法的实现; (10)求顺序表第i个元素算法的实现。 3、实验要求 (1)能够熟练在Visual C++6.0环境中进行程序的编辑、编译和调试; (2)会书写类C语言的算法,并将算法转变为程序实现。 4、运行程序 #include #include #define MaxSize 100 #define LISTINCREMENT 10 typedef char ElemType; typedef struct{ ElemType *elem; int length; int listsize; }SqList; int InitList_Sq(SqList &L){ L.elem = (ElemType *)malloc(MaxSize*sizeof(ElemType)); if(!L.elem) return 0;

L.length = 0; L.listsize=MaxSize; return 1;} int ListInsert_Sq(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1) return 0; ElemType *p; if(L.length>=L.listsize) { ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(! newbase) return 0; L.elem = newbase; L.listsize += LISTINCREMENT; } ElemType *q=&L.elem[i-1]; for(p=&L.elem[L.length-1];p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return 1;} int ListDelete_Sq(SqList &L,int i,ElemType &e){ if(i<1||i>L.length) return 0; ElemType *p=&(L.elem[i-1]); e=*p; ElemType *q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; return 1;} void Disp_Sq(SqList L){ if(L.length==0) printf("此顺序表为空表!\n"); for(int i=0;i

相关文档
最新文档