当前位置:文档之家› 顺序表的定义及基本操作

顺序表的定义及基本操作

顺序表的定义及基本操作
顺序表的定义及基本操作

顺序表的定义及基本操作

一、实验目的、意义

(1)掌握线性表顺序存储结构的特点。

(2)熟练掌握顺序表的基本运算,理解用它们表示时插入与删除操作的算法。(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力

二、实验内容及要求

说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

具体要求:

建立顺序表,完成顺序表的基本操作:初始化、插入、删除、输出(遍历)、销毁, 置空表、求表长、查找元素、判线性表是否为空等。(参见教材19页)

实验提示:

(1)定义顺序表:SqList,完成顺序表的基本操作,生成头文件SqList.h。

参考运行界面:

三、实验所涉及的知识点

数据结构、C语言语法函数、指针、数组、循环语句等。

四、实验结果及分析

(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)

五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)

调试程序时,出现了许多错误。如:头结点的建立出错、忽略了创建释放节点,另外还有一些语法上的错误。单单排查错误就用满了实验课的时间,课上未完成。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,完善自己的不足之处。

六、程序清单(包含注释)

#include

#include

#include

int temptag = 0;

typedef int ElemType;

typedef struct LNode //定义单链表结点类型

{

ElemType data;

struct LNode *next;

} LinkList;

void InitList(LinkList *&L) //初始化链表

{

L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点

L->next=NULL;

printf("初始化链表成功!\n");

}

void DestroyList(LinkList *&L) //销毁链表,也就是释放内存

{

LinkList *p=L,*q=p->next;

while (q!=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

int ListLength(LinkList *L) //输出链表的长度

{

LinkList *p=L;int i=0;

while (p->next!=NULL)

{

i++;

p=p->next;

}

return(i);

}

void DispList(LinkList *L) //显示链表的数据

{

printf("链表中的数据如下:\n");

LinkList *p=L->next;

while (p!=NULL)

{

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

int GetElem(LinkList *L,int i,ElemType &e) //获取链表中的任意位置的元素。但是不能越界{

int j=1;

LinkList *p=L->next;

while (j

{

j++;

p=p->next;

}

if (p==NULL)

return 0;

else

{

e=p->data;

return 1;

}

}

int ListInsert(LinkList *&L,int i,ElemType e) //插入新的节点

int j=0;

LinkList *p=L,*s;

while (j

{

j++;

p=p->next;

}

if (p==NULL) //未找到第i-1个结点

{

printf("未找到第%d个节点!\n", (i-1));

return 0;

}

else //找到第i-1个结点*p

{

s=(LinkList *)malloc(sizeof(LinkList)); //创建新结点*s

s->data=e;

s->next=p->next; //将*s插入到*p之后

p->next=s;

return 1;

}

}

int ListDelete(LinkList *&L,int i) //删除相应位置的节点

{

int j=0;

LinkList *p=L,*q;

while (j

{

j++;

p=p->next;

}

if (p==NULL) //未找到第i-1个结点

return 0;

else //找到第i-1个结点*p

{

q=p->next; //q指向要删除的结点

if (q==NULL) return 0;

//e=q->data;

p->next=q->next; //从单链表中删除*q结点

free(q); //释放*q结点

return 1;

}

}

void jiangxu(LinkList *&L) //降序排列链表中的元素

int temp1, temp2;

LinkList *q, *temp;

q = L->next;

while(q != NULL)

{

temp = q->next;

while(temp != NULL)

{

temp1 = q->data;

temp2 = temp->data;

if(temp1 < temp2)

{

q->data = temp2;

temp->data = temp1;

}

temp = temp->next;

}

q = q->next;

}

}

void nizhi(LinkList *&L) //将链表中的元素顺序逆置

{

LinkList *New, *p, *q;

p = L->next;

New = (LinkList *)malloc(sizeof(LinkList));

New->next = NULL;

while(p != NULL)

{

LinkList *s=(LinkList *)malloc(sizeof(LinkList));

s->data = p->data;

p = p->next;

s->next = New->next;

New->next = s;

}

L = New;

}

void MaxAndMin(LinkList *&L) //求最大值和最小值{

LinkList *temp;

int Max, Min;

temp = L->next;

Max = -100;

Min = 100;

while(temp != NULL)

{

if(temp->data <= Min)

{

Min = temp->data;

}

if(temp->data >= Max)

{

Max = temp->data;

}

temp = temp->next;

}

printf("最大值是:%d\n最小值是:%d\n", Max, Min);

}

void Add(LinkList *&L) //添加一个新的链表,并与之前的链表合并,降序输出{

LinkList *List2, *p;

InitList(List2);

int data, tag = 1;

printf("请输入第二个链表的数据:\n");

scanf("%d", &data);

while(data != -1)

{

ListInsert(List2, tag, data);

tag++;

scanf("%d", &data);

}

printf("第一个链表:\n");

DispList(L);

printf("第二个链表:\n");

DispList(List2);

p = List2->next;

while(p != NULL)

{

LinkList *s=(LinkList *)malloc(sizeof(LinkList));

s->data = p->data;

p = p->next;

s->next = L->next;

L->next = s;

}

jiangxu(L);

printf("合并后的链表:\n");

DispList(L);

}

int MaxDigui(LinkList *&L) //递归求最大值

{

int MaxValue;

if(!L->next)

return L->data;

else

{

MaxValue=MaxDigui(L->next);

if(L->data > MaxV alue)

MaxValue = L->data;

return MaxValue;

}

}

LinkList *CreatLinkList (LinkList *&L) //递归创建链表

{

//建立单链表

int ch;

scanf("%d",&ch);

if(ch==-1)

{

L = NULL;

return L;

}

else

{

L=(LinkList *)malloc(sizeof(LinkList));

L->data=ch;

L->next = NULL;

return CreatLinkList (L->next);

}

}

int IsAscendOrder(LinkList *L) //递归检查链表是否单调递增{

if(L->next == NULL)

return 1;

else

{

if(L->next->data < L->data)

return 0;

else

return IsAscendOrder(L->next);

}

int main()

{

LinkList *h;

ElemType e;

int temp = 1, data;

while(temp != 0)

{

printf("************************************************************************** ******");

printf(" (1)输入1,初始化单链表h\n");

printf(" (2)输入2,采用尾插法插入元素, -1表示输入结束\n");

printf(" (3)输入3,输出单链表h:\n");

printf(" (4)输入4,输出单链表h长度\n");

printf(" (5)输入5,然后输入N,查找单链表的第N个元素\n");

printf(" (6)输入6,在第M个元素位置上插入元素NUM\n");

printf(" (7)输入7,然后输入K,删除链表的第K个元素\n");

printf(" (8)输入8,释放单链表\n");

printf(" (9)输入9,将链表元素降序排列\n");

printf(" (10)输入10,输出最大值和最小值\n");

printf(" (11)输入11,将该链表逆置\n");

printf(" (12)输入12,创建第二个链表,并合并之前链表,降序输出\n");

printf(" (13)输入13,用递归算法创建链表\n");

printf(" (14)输入14,用递归算法求最大值\n");

printf(" (15)输入15,用递归算法判断链表数据是否单调递增\n");

printf("************************************************************************** ******");

scanf("%d", &temp);

if(temp == 1)

InitList(h);

else if(temp == 2)

{

int tag = 1;

scanf("%d", &data);

while(data != -1)

{

ListInsert(h, tag, data);

tag++;

scanf("%d", &data);

}

printf("数据插入成功!\n");

}

else if(temp == 3)

DispList(h);

else if(temp == 4)

printf("该单链表的长度= %d\n",ListLength(h)); else if(temp == 5)

{

int N;

scanf("%d", &N);

if(N<1||N>ListLength(h))

printf("你输入的数据不合法!\n");

else

{

GetElem(h,N,e);

printf("第%d个元素是%d\n", N, e);

}

}

else if(temp == 6)

{

int M, num;

printf("请输入M值和NUM值:\n");

scanf("%d%d", &M, &num);

if(M<=0||M>ListLength(h)+1)

printf("你输入的数据不合法!\n");

else

ListInsert(h, M, num);

}

else if(temp == 7)

{

int K;

scanf("%d", &K);

ListDelete(h,K);

}

else if(temp == 8)

DestroyList(h);

else if(temp == 9)

{

jiangxu(h);

}

else if(temp == 10)

{

MaxAndMin(h);

}

else if(temp == 11)

{

nizhi(h);

}

else if(temp == 12)

{

Add(h);

}

else if(temp == 13)

{

LinkList *temp;

temp = CreatLinkList(h);

LinkList *T;

T = (LinkList *)malloc(sizeof(LinkList));

T->next = h->next;

T->data = h->data;

h->next = T;

}

else if(temp == 14)

{

int res2;

res2 = MaxDigui(h);

printf("最大值是%d\n", res2);

}

else if(temp == 15)

{

int pand;

pand = IsAscendOrder(h->next);

if(pand == 1)

printf("该链表的数据是单调递增的\n");

else if(pand == 0)

printf("该链表的数据不是单调递增的\n");

}

}

system("pause");

return 0;

}

excel表格的基本操作快捷指令

excel表格的基本操作 Excel 快捷键和功能键 Ctrl 组合快捷键 按键说明 Ctrl+( 取消隐藏选定范围内所有隐藏的行。 Ctrl+) 取消隐藏选定范围内所有隐藏的列。 Ctrl+& 将外框应用于选定单元格。 Ctrl+_ 从选定单元格删除外框。 Ctrl+~ 应用“常规”数字格式。 Ctrl+$ 应用带有两位小数的“货币”格式(负数放在括号中)。 Ctrl+% 应用不带小数位的“百分比”格式。 Ctrl+^ 应用带有两位小数的“指数”格式。 Ctrl+# 应用带有日、月和年的“日期”格式。 Ctrl+@ 应用带有小时和分钟以及AM 或PM 的“时间”格式。 Ctrl+! 应用带有两位小数、千位分隔符和减号(-)(用于负值)的“数值”格式。Ctrl+- 显示用于删除选定单元格的“删除”对话框。 Ctrl+* 选择环绕活动单元格的当前区域(由空白行和空白列围起的数据区域)。在数据透视表中,它将选择整个数据透视表。 Ctrl+: 输入当前时间。 Ctrl+; 输入当前日期。 Ctrl+` 在工作表中切换显示单元格值和公式。 Ctrl+' 将公式从活动单元格上方的单元格复制到单元格或编辑栏中。 Ctrl+" 将值从活动单元格上方的单元格复制到单元格或编辑栏中。 Ctrl++ 显示用于插入空白单元格的“插入”对话框。 Ctrl+1 显示“单元格格式”对话框。 Ctrl+2 应用或取消加粗格式设置。 Ctrl+3 应用或取消倾斜格式设置。 Ctrl+4 应用或取消下划线。 Ctrl+5 应用或取消删除线。 Ctrl+6 在隐藏对象、显示对象和显示对象占位符之间切换。 Ctrl+7 显示或隐藏“常用”工具栏。 Ctrl+8 显示或隐藏大纲符号。 Ctrl+9 隐藏选定的行。 Ctrl+0 隐藏选定的列。 Ctrl+A 选择整个工作表。 如果工作表包含数据,则按Ctrl+A 将选择当前区域。再次按Ctrl+A 将选择整个工作表。 当插入点位于公式中某个函数名称的右边时,则会显示“函数参数”对话框。

线性表类型定义

线性表 顺序表 语言级上的类型定义描述 const maxsize=顺序表的容量: typedef struct {datatype data[maxsize]; int last; }sqlist; sqlist L; 基本运算的实现 1.插入 void insert_sqlist(sqlist L,datatype x,int i) 2.删除 void delete_sqlist(sqlist L,int i); 3.定位 int locate_sqlist(sqlist L,datatype X) 4.求表长 5.读表元 单链表 语言级上的类型定义描述 typedef struct node *pointer;

struct node {datatype data; pointer next; }; typedef pointer lklist; 基本运算的实现 1.初始化 lklist initiate_lklist() 2.求表长 int length_lklist(lklist head) 3.按序号查找 pointer find_lklist(lklist head,int i) 4.定位 int locate_lklist(lklist head,datatype x) 5.删除 void delete_lklist(lklist head,int i) 6.插入 void insert_lklist(lklist head,datatype x,int i) 7.建表 lklist create_lklist1() 8.清除重复结点

void purge_lklist(lklist head) 双链表 语言级上的类型定义描述typedef struct dnode *dpointer; struct dnode {datatype data; dpointer prior,next; } typedef dpointer dlklist; 串 语言级上的类型定义描述const maxlen=串的最大长度; typedef struct

数据结构_实验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;

数据结构实现顺序表的各种基本运算(20210215233821)

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

主函数main

四、实验步骤与算法实现 #in clude #in clude #defi ne MaxSize 50 typedef char ElemType; typedef struct {ElemType data[MaxSize]; in t le ngth; void In itList(SqList*&L)〃 初始化顺序表 L {L=(SqList*)malloc(sizeof(SqList)); L->le ngth=0; for(i=0;ile ngth;i++) prin tf("%c ",L->data[i]); } void DestroyList(SqList*&L)〃 {free(L); } int ListEmpty(SqList*L)〃 {retur n( L->le ngth==O); } int Listle ngth(SqList*L)〃 {return(L->le ngth); } void DispList(SqList*L)〃 {int i; 释放顺序表 L

抽象数据类型线性表的定义

抽象数据类型线性表的定义如下: ADT List { 数据对象:D={ a i | a i∈ElemSet, i =1, 2, ……, n, n≥0} 数据关系:R1 = { < a i-1 , a i > | a i-1 , a i ∈D, i =2, ……, n } 基本操作: InitList (&L ) 操作结果:构造一个空的线性表L 。 DestoryList (&L) 初始条件:线性表L已存在。 操作结果:销毁线性表L。 ClearList (&L) 初始条件:线性表L已存在。 操作结果:将L重置为空表。 ListEmpty (L) 初始条件:线性表L已存在。 操作结果:若L 为空表,则返回TRUE,否则返回FALSE。 ListLength (L) 初始条件:线性表L已存在。 操作结果:返回L中数据元素个数。 GetElem ( L, i, &e ) 初始条件:线性表L已存在,1≤i≤ListLength(L)+1。

操作结果:用e返回L中第i个数据元素的值。 LocateElem ( L,e, compare() ) 初始条件:线性表L已存在,compare()是判定函数。 操作结果:返回L中第1个与e满足关系compare() 的数据元素的位序。若这样的数据元素不存在,则返 回值0。 PriorElem ( L, cur_e, &pre_e ) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素且不是第1个, 则用pre_e返回它的前驱,否则操作失败。 NextElem ( L, cur_e, &next_e ) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素且不是最后一个, 则用next_e返回它的后继,否则操作失败。 ListInsert ( &L, i, e ) 初始条件:线性表L已存在,1≤i≤ListLength(L)+1。 操作结果:在L中第i个位置之前插入新的数据元素e, L的长度加1。 ListDelete( &L, i, &e ) 初始条件:线性表L已存在且非空,1≤i≤ListLength(L)。 操作结果:删除L的第i个数据元素,并用e返回其值,

顺序表的基本操作

《数据结构》实验报告一 顺序表的基本操作 班级:网络工程学号:12015242183 实验日期:2016.9.25 姓名:邓宗永 程序文件名及说明:sequenlist 顺序表 一、实验目的 1、掌握使用Turbo C3.0上机调试线性表的基本方法; 2、掌握顺序表的基本操作:插入、删除、查找以及线性表合并等运算。 二、实验要求 1、认真阅读和掌握实验的程序。 2、上机运行程序。 3、保存和打印出程序的运行结果,并结合程序进行分析。 4、按照你对线性表的操作需要,编写写主程序并运行,打印出文件清单和运行结果 三、注意事项: 在磁盘上创建一个目录,专门用于存储数据结构实验的程序。 四、实验内容 1.顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: (1)从键盘输入10个整数,产生顺序表,并输入结点值。 (2)从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 (3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x 插入在对应位置上,输出顺序表所有结点值,观察输出结果。 (4)从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 五、实验报告必须写明内容 1.程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设 计,符号名说明等) 程序的结构:通过子函数实现输出,删除,插入,查找等功能,高耦合低内聚 数据结构:线性结构,顺序储存 输入/输出设计:根据屏幕提示,从键盘读取数据 2.源程序及注释: #include #include typedef int datatype; #define maxsize 10 typedef struct //创建一个顺序表包含10个整数

Excel表格的基本操作教程

ExcelExcel表格的基本操作教程系列 也许你已经在Excel中完成过上百张财务报表,也许你已利用Excel函数实现过上千次的复杂运算,也许你认为Excel也不过如此,甚至了无新意。但我们平日里无数次重复的得心应手的使用方法只不过是Excel全部技巧的百分之一。本专题从Excel中的一些鲜为人知的技巧入手,领略一下关于Excel的别样风情。 一、让不同类型数据用不同颜色显示 在工资表中,如果想让大于等于2000元的工资总额以“红色”显示,大于等于1500元的工资总额以“蓝色”显示,低于1000元的工资总额以“棕色”显示,其它以“黑色”显示,我们可以这样设置。 1.打开“工资表”工作簿,选中“工资总额”所在列,执行“格式→条件格式”命令,打开“条件格式”对话框。单击第二个方框右侧的下拉按钮,选中“大于或等于”选项,在后面的方框中输入数值“2000”。单击“格式”按钮,打开“单元格格式”对话框,将“字体”的“颜色”设置为“红

色”。 2.按“添加”按钮,并仿照上面的操作设置好其它条件(大于等于1500,字体设置为“蓝色”;小于1000,字体设置为“棕色”)。 3.设置完成后,按下“确定”按钮。 看看工资表吧,工资总额的数据是不是按你的要求以不同颜色显示出来了。 六、让数据按需排序 如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。 1.执行“格式→选项”命令,打开“选项”对话框,进入“自定义序列”标签中,在“输入序列”下面的方框中输入部门排序的序列(如“机关,车队,一车间,二车间,三车间”等),单击“添加”和“确定”按钮退出。 2.选中“部门”列中任意一个单元格,执行“数据→排序”命令,打开“排序”对话框,单击“选项”按钮,弹出“排序选项”对话框,按其中的下拉按钮,选中刚才自定义

顺序表的基本操作 (2)

顺序表的基本操作 /*sqList.h 文件*/ #define LIST_INIT_SIZE 50 /*初始分配的顺序表长度*/ #define INCREM 10 /*溢出时,顺序表长度的增量*/ #define OVERFLOW 1 #define OK 0 #define ERROR -1 typedef int ElemType; /*定义表元素的类型*/ typedef struct SqList{ ElemType *elem; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }SqList; /*sqListOp.h 文件*/ #include "Sqlist.h" int InitList_sq(SqList &L); //顺序表创建函数定义 void FreeList_sq(SqList &L); //顺序表销毁函数定义 int ListInsert_sq(SqList &L, int i, ElemType e); //在顺序表的位置i插入元素e void PrintList_sq(SqList &L); //遍历并输出顺序表所有元素 int ListDelete_sq(SqList &L, int i,ElemType &e); //删除顺序表第i个元素的 bool ListEmpty(SqList &L); //判断顺序表是否为空 int LocateElem_sq(SqList L,ElemType e); //在顺序表里查找出第1个与e相等的数据元素位置//已知线性表La和Lb的元素按值非递减排列 //归并后的La和Lb得到新的顺序线性表Lc,Lc的元素也是按值非递减排列 void MergeList_sq(SqList La,SqList Lb, SqList &Lc); /*sqListOp.cpp文件*/ #include #include #include #include "sqlistOp.h" //创建顺序表 int InitList_sq(SqList &L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); /*初始化失败,返回0*/ L.length = 0; /*置空表长度为0*/ L.listsize = LIST_INIT_SIZE; /*置初始空间容量*/ return OK; /*初始化成功,返回1*/

顺序表的实现

数据结构实验顺序表的实现 姓名 学号 专业班级

实验名称:顺序表的实现 一.实验目的: 1.掌握线性表的顺序存储结构; 2.验证顺序表的基本操作的实现; 3.理解算法与程序的关系,能够将顺序表转换为对应程序; 二.实验内容: 1.建立含有若干元素的顺序表; 2.对已建立的顺序表实现插入、删除、查找等基本操作; 三.算法设计 1.建立顺序表并初始化 1)顺序表的大小为MaxSize,存入元素的下标为n a.如果n>MaxSize,则抛出参数非法; b.将元素a[i]赋值给线性表中元素序号为i的元素; 2.顺序表的插入 1)如果表满了,则抛出上溢异常; 2)如果元素插入的位置不合理,则抛出位置异常; 3)将最后一个元素及第i个元素分别向后移动一个位置; 4)将要插入的元素x填入为位置i处; 5)表长加1; 3.顺序表的删除 1)如果表空,则抛出下一异常;

2)如果删除的位置不合理,则抛出删除位置异常; 3)取出被删元素; 4)将下表为i至n-1的元素分别向前移动1个元素; 5)表长减一,返回被删元素值; 4.顺序表的查找 A.按位查找 1)如果查找的位置不合理,则抛出查找的不合理; 2)返回被查找的元素值; B.按值查找 1)若查找成功,返回被查找元素的序号; 2)若查找失败,则返回0; 四.部分代码 文件名称:SeqList.h #define SEQLIST_H const int MaxSize = 5; template class SeqList{ publi#ifndef SEQLIST_H c: SeqList(); //默认构造函数 SeqList(T a[],int n); //数组a传递数据元素信息,n表示元素个数 ~SeqList(); //析构函数 int Length(); //返回顺序表的长度 void Insert(int i,T x);//在第i个位置插入数据元素x T Get(int i); //得到第i个位置上的数据元素 T Delete(int i); //删除第i个位置上的数据元素 int Locate(T x); //在顺序表中查找数据元素x,并返回它的位置,否则返回0. void PrintList(); //打印顺序表中的数据元素信息。 private: T data[MaxSize]; //数组data用来存放顺序表的数据元素 int length; //length表示顺序表中数据元素的个数 };

表的基本操作

教学内容: 4.3 表的基本操作 4.3.1 表的打开和关闭 1、使用菜单打开表 (1)选择“文件”菜单中的“打开”项,在弹出的“打开”对话框中“文件类型”列表框中选择“表(*.dbf)。 (2)选择或输入要打开的表文件名,单击“确定”打开表。 2、用命令打开表 命令格式:USE 表名 [EXCLUSIVE|SHARED] 3、数据表的关闭 如果打开的表是数据库表,则在关闭数据库的同时,该数据库中的所有表也将同时关闭。 如果打开的是自由表,则可用以下命令关闭该表。 命令格式1:USE 命令功能:关闭当前数据表。 命令格式2:CLOSE TABLE 命令功能:关闭所有打开的数据表。 4.3.2 数据的输入 1、使用浏览器输入数据 (1) 打开要输入数据的表。 (2) 选择“显示”菜单中“浏览”或“编辑“项;选择“浏览”,则显示”浏览“窗口;选择“编辑”,则显示“编辑”窗口。 (3)选择“显示”菜单中的“追加方式”,可向表中输入新记录的数据。 2、使用APPEND命令在当前数据表的尾部添加新记录 命令格式:APPEND [BLANK] 3、使用INSERT命令在当前表的任意位置插入一条新记录 命令格式:INSERT [BLANK][BEFORE] 4、备注型和通用型字段数据的输入 (1)备注型字段数据的输入,操作步骤如下: ①打开表的“编辑”或“浏览”窗口。

②把光标移到备注型字段下双击左键或按Ctrl+PageDown或Ctrl+PageUp键,进入备注字段的编辑窗口。 ③在备注字段的编辑窗口,可以输入或修改备注型数据。 (2)通用型数据的输入 通用型字段数据多数是用于存储OLE对象,如,图像、声音、电子表格和文字处理文档等,其长度也是不确定的。给通用型字段输入数据,操作步骤如下: ①打开表的“编辑”或“浏览”窗口。 ②把光标移到通用型字段下双击左键或按Ctrl+PageDown或Ctrl+PageUp键,进入通用字段的编辑窗口。 ③选择“编辑”菜单中“插入对象”,在“插入对象”窗口,选择“由文件创建”按钮,单击“浏览”按钮,选择要插入的文件。 ④单击“确定”按钮,选择的对象被插入到通用字段中。 4.3.3 记录的浏览 1、浏览数据窗口的定制 (1)打开表的“浏览”窗口。 (2)用鼠标拖动某一字段到指定处,可改变字段的显示顺序。 (3)可以使用鼠标调整字段的显示宽度。 (4)在表“浏览”窗口的左下角有一个窗口拆分条,把它拖到一个适当的位置,就可以把“浏览”窗口拆分成两个窗口,将其改变成有“浏览”和“编辑”两种显示方式的窗口。(5)选择“显示”菜单中的“网格线”,可以显示或隐藏浏览窗口中的网格。 2、记录的筛选 (1)打开表的“浏览”窗口。 (2)在“表”菜单中,选择“属性”命令,弹出“工作区属性”对话框。 (3)在“工作区属性”对话框中,可以直接在“数据过滤器”文本框中输入筛选表达式,或者选择“数据过滤器”框后面的“浏览”(…)按钮,在“表达式生成器”对话框中创建一个表达式。 (4)单击“确定”按钮,则在“浏览”窗口中只显示筛选过的记录。 3、字段的筛选 (1)打开表的“浏览”窗口,选择“表”菜单中的“属性”。 (2)在“工作区”属性对话框的“允许访问”框内,选中“字段筛选指定的字段”,单击“字段筛选”按钮,弹出“字段选择器”对话框。 (3)在“字段选择器”对话框中,选择“所有字段”框内需要显示的字段,单击“添加”按钮,将所需字段移入“选字字段”栏中。 (4)在选定了所需字段后,单击“确定”按钮。返回“工作区属性”对话框,单击“确定”按钮,关闭“工作区属性”对知框。 4、使用命令浏览表 命令格式1:BROWSE [范围] [FIELDS 字段表][FOR 条件]

数据结构实验报告-顺序表的创建、遍历及有序合并操作

数据结构实验报告-顺序表的创建、遍历及有序合并操作二、实验内容与步骤 实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下: typedef int ElemType; #define MAXSIZE 100 #define FALSE 0 #define TRUE 1 typedef struct {ElemType data[MAXSIZE]; int length; }seqlist; 创建顺序表,遍历顺序表 #include #include #define MAXSIZE 100 #define Icreament 20 #define FALSE 0

#define TRUE 1 typedef int ElemType; //用户自定义数据元素类型 // 顺序表结构体的定义 typedef struct { ElemType *elem; //顺序表的基地址 int length; //顺序表的当前长度 int listsize; //预设空间容量 }SqList; //线性表的顺序存储结构 SqList* InitList() //创建空的顺序表 { SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L if(!L) { printf("空间划分失败,程序退出\n"); return NULL; } L->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType)); if(!L->elem) { printf("空间划分失败,程序退出\n");

实验二 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所 示。

线性表的存储结构定义及基本操作

一、实验目的: . 掌握线性表的逻辑特征 . 掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算 . 熟练掌握线性表的链式存储结构定义及基本操作 . 理解循环链表和双链表的特点和基本运算 . 加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力 二、实验内容: (一)基本实验内容(顺序表): 建立顺序表,完成顺序表的基本操作:初始化、插入、删除、逆转、输出、销毁, 置空表、求表长、 查找元素、判线性表是否为空; 1.问题描述:利用顺序表,设计一组输入数据(假定为一组整数),能够对顺序表进行如下操作: . 创建一个新的顺序表,实现动态空间分配的初始化; . 根据顺序表结点的位置插入一个新结点(位置插入),也可以根据给定的值进行插入(值插入),形成有序 顺序表; . 根据顺序表结点的位置删除一个结点(位置删除),也可以根据给定的值删除对应的第一个结点,或者删 除指定值的所有结点(值删除); . 利用最少的空间实现顺序表元素的逆转; . 实现顺序表的各个元素的输出; . 彻底销毁顺序线性表,回收所分配的空间; . 对顺序线性表的所有元素删除,置为空表; . 返回其数据元素个数; . 按序号查找,根据顺序表的特点,可以随机存取,直接可以定位于第i 个结点,查找该元素的值,对 查找结果进行返回; . 按值查找,根据给定数据元素的值,只能顺序比较,查找该元素的位置,对查找结果进行返回; . 判断顺序表中是否有元素存在,对判断结果进行返回; . 编写主程序,实现对各不同的算法调用。 2.实现要求: 对顺序表的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要 从时间复杂度和空间复杂度上进行评价; . “初始化算法”的操作结果:构造一个空的顺序线性表。对顺序表的空间进行动态管理,实现动态分配、回收和增加存储空间; . “位置插入算法”的初始条件:顺序线性表L 已存在,给定的元素位置为i,且1≤i≤ListLength(L)+1 ;操作结果:在L 中第i 个位置之前插入新的数据元素e,L 的长度加1; . “位置删除算法”的初始条件:顺序线性表L 已存在,1≤i≤ListLength(L) ; 操作结果:删除L 的第i 个数据元素,并用e 返回其值,L 的长度减1 ; . “逆转算法”的初始条件:顺序线性表L 已存在; 操作结果:依次对L 的每个数据元素进行交换,为了使用最少的额外空间,对顺序 表的元素进行交换;

顺序表的基本操作(C语言实现)

#define OVERFLOW 0 #define List_size 100 #define Listincrement 10 #include #include typedef float ElemType; typedef struct { ElemType *elem; int length; int listsize; }Sqlist; void main() { Sqlist L; Sqlist creat_Sq(Sqlist*L); void print_Sq(Sqlist*L); void ascend(Sqlist*L,int i); void Insert(Sqlist*L,float e); int i; float e;

creat_Sq(&L); printf("\n"); print_Sq(&L); printf("\n"); ascend(&L,i); print_Sq(&L); printf("\n"); Insert(&L,e); print_Sq(&L); printf("\n"); } Sqlist creat_Sq(Sqlist*L)//创建顺序表 { ElemType *newbase; int i,n; L->elem=(ElemType*)malloc(List_size*sizeof(ElemType)); if(!L->elem) exit(OVERFLOW);//存储分配失败

printf("请输入元数个数:\n"); scanf("%d",&n); if(n>=List_size)//如果所需空间大于线性表的初始空间,则增加空间容量 { newbase=(ElemType*)malloc((List_size+Listincrement)*sizeof(E lemType)); L->elem=newbase; L->length=n; L->listsize=List_size+Listincrement; for(i=0;ilength;i++) { printf("请输入第%d个数据:",i+1); scanf("%f",&(L->elem[i])); } if(!newbase) exit(OVERFLOW); } else {L->length=n; L->listsize=List_size; for(i=0;ilength;i++)

实验三 表的基本操作

实验三表的基本操作 一、实验目的 1.掌握表建立的方法以及修改表结构的方法。 2.掌握表中数据输入的方法。 3.掌握记录指针的移动方法。 4.掌握表的基本操作:追加、插入、修改、显示、删除和恢复记录。 5.掌握表中的数据访问控制方式。 6.掌握表的排序和索引及使用。 7.掌握多个工作区和多表的操作方法。 二、实验内容和步骤 1.创建自由表。 (1)创建学生情况表(xsqk.dbf) 表结构如下: 字段名类型宽度小数位索引 null 学号 C 8 姓名 C 8 性别 C 2 专业 C 12 出生日期 D 8 入学分数 N 3 0 团员 L 1 备注 M 4 照片 G 4 ①在D盘创建学生管理文件夹,选择“工具/选项/文件位置”把该文件夹设为VFP的默认工作目录。 ②选择“文件/新建/表/新建文件”,在“创建”对话框中的输入表名文本框输入“xsqk”,单击“保存”按钮。 ③进入图1所示的表设计器,依次设置表的所有字段名字、类型、宽度和小数位数。最后单击“确定”按钮。 ④系统提示现在录入记录吗,单击“是”,录入下面两条记录。 ⑤录入两条记录完毕,选择“显示/浏览…”命令查看录入的两条记录。

⑥ 选择“查看/追加方式”命令,继续输入以下三条记录。 ⑦ 选择“显示/表设计器”命令,或在命令窗口输入“MODIFY STRUCTURE ”,打开表设计器,修改表结构,在性别后加一字段籍贯(c,20)。 (2)创建课程表(kc.dbf ) ① 表结构如下: 字段名 类型 宽度 小数位 索引 null 课程号 C 4 课程名 C 12 学分 N 1 0 先修课 C 10 ② 表结构建立完毕,输入以下记录: (3)创建成绩表(cj.dbf ) ① 表结构如下: 字段名 类型 宽度 小数位 索引 null 学号 C 8 课程号 C 4 学期 C 1 图1 表设计器

顺序表的建立及基本操作

山东师范大学 实验报告 课程:数据结构班级: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] << " "; } //依次输出顺序表 cout << endl; } void FindMax(SqList &L) //找最大值 { cout << "该组数据的最大值为:" << endl; int m = L.data[0]; int i; for (i = 0; i < L.length; i++) //依次比较两个数的大小,取大者赋给m { if (m < L.data[i]) { m = L.data[i]; } } cout << m << endl; //输出最大值 }

Word表格基本操作与Excel

Word的基本操作 1.创建表格的方法 (1)“表格”菜单→插入→表格或“表格和边框”工具栏上“插入表格”按钮。 (2)单击“常用工具栏上”的“插入表格”按钮 (3)“表格”菜单→绘制表格(“表格与边框”工具栏中使用铅笔绘制表格) 2.选择表格 (1)菜单选择 “表格”菜单→选定→行(列)/单元格/表格 (2)鼠标选择 1)选择行/列 指针移到行/列前→单击左键 2)选择单元格 指针移到单元格左侧,出现黑色斜箭头时单击左键 3)选择整张表 指针移到表格左上角,出现十字箭头时单击左键 3.插入和删除行/列 选定一(多)行/列→“表格”菜单→插入行/列 选定要删除的行/列→“表格”菜单→删除→删除行/列 4.表格格式化 (1)调整行高/列宽

1)手动调整:鼠标拖行线/列线 2)精确调整:选定行/列→表格→表格属性→行/列选项卡→指定行高/列宽 3)最适合的列宽:双击列与列间的分隔线或双击表格最左侧的边框线 4)平均分布各行各列:表格→自动调整→平均分布各行/各列(“表格和边框”工具栏→平均分布各行/各列) (2)合并单元格 选中几个小的单元格→表格→合并单元格 (3)拆分单元格 选中一个单元格→表格→拆分单元格 (4)设置文本在单元格中的对齐方式 右击选中的单元格→单元格对齐方式→中部居中(水平和垂直都居中) (5)边框和底纹 1)选中表格/单元格→“格式”菜单→边框和底纹 2)表格和边框工具栏→“边框”、“底纹”按钮 3)局部用铅笔画 (6)行与行/列与列的交换: 1)选中整行/整列→按住左键拖动第一个单元格到相对的单元格。 2)插入空行/空列→交换位置

(7)表格自动套用格式 选中表格→“表格”菜单→表格自动套用格式(8)表格和文字的相互转换 选中表格/文字→“表格”菜单→转换 (9)绘制斜线表头 1)使用铅笔绘制 2)“表格”菜单→绘制斜线表头 5.Word文档单元格对齐方式(设置单元格文字垂直和水平居中) 选中对象后点右键->单元格对齐方式->选择中间的选项 6生成目录 插入->引用->索引和目录->目录 7.设置边框的样式 格式->边框和底纹->边框->(设置边框线型、颜色、宽度)8.设置字体效果(删除线、空心、上标、下标、阴影等等) 格式->字体->字体(N) 或选中文字->右键->字体9.添加水印 格式->背景->水印 10.设置背景图片 格式->背景->其他填充效果->图片

实验报告1 数据库及表基本操作

实验报告一数据库及表基本操作 姓名:全青青学号:1002010117 班级:无机非一班日期:2 请填入你的班级和做实验的日期。按照《数据库技术及应用——习题与实验指导》第一部分实验指导中“实验三熟悉Access系统集成环境”、“实验四数据库操作”、“实验五表操作”和预习“实验一数据库设计”、“实验二SQL语言应用”的实验内容,边完成各项实验操作,边按要求填写该实验报告。 一、实验目的 1.掌握Access 2003的基本操作。 2.掌握建立一个数据库文件,并对其实施打开与关闭的操作方法。 3.掌握创建表的基本操作方法。 4.掌握对各表完成部分数据操纵的方法。 二、实验报告内容 1.按照P.10实验3-2的操作提示将创建的空数据库命名为“某某的第一个数据库”(注:某某为自 己的姓名),保存位置为以自己姓名命名的文件夹,并将保存文件的对话框粘贴到此:

2.按照P.15实验4-2的操作提示,关闭自己所创建的数据库;再按照P.15实验4-1的操作提示, 找到保存自己所创建的数据库的位置,打开自己所创建的数据库,并将打开文件的对话框粘贴到此:

3.参照P.16实验5-1的操作提示,预习“实验一数据库设计”并根据P.3中实验1-4的8个表结 构逐一定义每个表每个字段的名字、类型、长度等相关内容,并将定义好的每一个表设计视图窗口粘贴到此: 表1-1-1 “学院”表结构(表设计视图窗口)

表1-1-2 “系”表结构(表设计视图窗口)

表1-1-3 “班级”表结构(表设计视图窗口)

表1-1-4 “学生”表结构(表设计视图窗口)

用C语言定义线性表的顺序存储结构

用C语言定义线性表的顺序存储结构 线性表顺序存储的表示:线性表的顺序存储结构可以借助于高级程序设计语言中的一维数组来表示,一维数组的下标与元素在线性表中的序号相对应。 线性表的顺序存储结构可用C语言定义如下: #define MAXSIZE /*线性表可能达到的最大长度;*/ typedef struct { ElemType elem[MAXSIZE];/* 线性表占用的数组空间。*/ int last;/*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ } SeqList; 说明: (1)结点类型定义中ElemType数据类型是为了描述的统一而自定的,在实际应用中,用户可以根据自己实际需要来具体定义顺序表中元素的数据类型,如int、char、float或是一种struct结构类型。 (2)从数组中起始下标为0处开始存放线性表中第一个元素。因此需要注意区分元素的序号和该元素在数组中的下标之间的对应关系,即数据元素a1在线性表中的序号为1,其对应的elem数组的

下标为0;ai在线性表中的序号为i,其对应的elem数组的下标为i-1。 利用定义的顺序表的数据类型SeqList就可以定义变量了。变量L的定义与使用方法有两种: (1)通过变量定义语句:SeqList L将L定义为SeqList类型的变量,可通过L.elem[i-1]来访问顺序表中序号为i的元素a i;通过https://www.doczj.com/doc/d816949047.html,st 可得到顺序表中最后一个元素的下标,而https://www.doczj.com/doc/d816949047.html,st+1就是顺序表的长度。 (2)通过指针变量定义语句:SeqList *L将L定义为指向SeqList类型的指针变量,使用时,可通过L->elem[i-1]来访问顺序表中序号为i的元素a i,通过L->last+1可得到顺序表的长度。 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

实验报告01-顺序表的基本操作

实验目的及要求: 了解和掌握顺序表的特点; 掌握顺序表基本操作的实现; 要求完成顺序表的初始化、插入、删除、显示操作的实现。实验设备环境及要求: PC机一台,内存要求128M以上,VC++6.0集成开发环境。实验内容与步骤: 1、在VC++6.0环境中新建一个工程和C++文件; 2、实现顺序表初始化、插入、删除算法,代码如下: #include #include #define MaxSize 100 typedef char ElemType; typedef struct{ ElemType *elem; int length; }SqList; int InitList_Sq(SqList &L){ L.elem = (ElemType *)malloc(MaxSize*sizeof(ElemType)); if(!L.elem) return 0; L.length = 0; return 1; } int ListInsert_Sq(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1) return 0; ElemType *p; 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;

相关主题
文本预览
相关文档 最新文档