表的基本操作

表的基本操作
表的基本操作

教学内容:

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 条件]

命令格式2:LIST| DISPLAY [范围][[FIELDS]字段表][FOR 条件][OFF][TO PRINTER [PROMPT]][TO FILE 文件名]

4.3.4 记录的定位

1、用菜单定位记录

(1)打开表,并进入表“浏览”窗口。

(2) 选择“表”菜单中“转到记录”,弹出“转到记录”子菜单。

(3) 在“转到记录”子菜单下,选择不同的选项,可以将记录指针移动到相应的记录上。

2、绝对定位命令

命令格式:GO〈表达式〉|[RECORD]N|BOTTOM |TOP

3、相对定位命令

命令格式:SKIP[〈表达式〉]

命令功能:将记录指针相对于当前记录向上或向下移动若干条记录位置。

4、顺序定位命令

命令格式:LOCATE[〈范围〉]FOR 条件

命令功能:将记录指针指向第一个满足条件的记录。

继续查找命令:CONTINUE

命令功能:继续查找下一条满足条件的记录。

说明:CONTINUE命令不能单独使用。

5、索引定位命令

使用LOCATE命令定位记录表不需要建立索引,在有索引的表中根据当前的索引来定位记录可使用FIND或SEEK命令完成。

4.3.5 记录的修改

1、使用菜单直接修改

(1)打开表,并进入“浏览”窗口。

(2)选择“表”菜单中的“替换字段”,弹出“替换字段”对话框。

(3)在“替换字段”对话框中选择要替换的字段和输入“替换为”表达式,并选择“作用范围”和“条件”。

(4)单击“替换”按钮,将指定字段值进行替换。

2、用命令交互式修改

命令格式:EDIT|CHANGE [范围][[FIELDS]字段表][FOR 条件]

命令功能:在“编辑”窗口中对数据进行修改。

3、用命令直接修改

命令格式:REPLACE [范围] 字段1 WITH 表达式1[,字段2 WITH 表达式2]… [FOR 条件]

命令功能:对当前表中范围内满足条件的记录,用表达式的值替换前面字段的值。4.3.6 记录的删除

1、逻辑删除记录

逻辑删除记录就是给某一条记录加上删除标记,并没有真正从表中将其删除。

(1)利用删除标记列

在表的浏览窗口中第一个字段的前面有一删除标记列。单击记录的该空白位置,则可加上黑色的删除标记。

(2)使用菜单

打开表,并进入“浏览”窗口。选择“表”菜单中的“删除记录”项,弹出“删除”对话框。在“删除“对话框中,设置需要删除记录的范围和条件,单击“删除”按钮,则将当前表中范围内满足条件的记录加上删除标记。

(3)使用命令

命令格式:DELETE [范围][FOR 条件]

命令功能:将当前表中范围内满足条件的记录加上删除标记。

2、恢复记录

(1)利用删除标记列

逐一单击有删除标记的记录前的删除标记列,使其变为空白,则可恢复记录。

(2)使用菜单

打开表,并进入“浏览”窗口。选择“表”菜单中的“恢复记录”项。

(3)使用命令

命令格式:RECALL [范围][FOR 条件]

3、物理删除

将带有删除标记的记录从表中真正删除掉,物理删除的记录则不能用恢复命令恢复。(1)使用菜单

打开表,并进入“浏览”窗口。选择“表”菜单中的“彻底删除”项,弹出“物理删除”提示对话框,在对话框中单击“是”则将所有带有删除标记的记录从表中删除。

(2)使用命令

命令格式1:PACK

命令功能:删除带有删除标记的记录。

命令格式2:ZAP

命令功能:删除所有记录,无论其是否有删除标记。

使用ZAP命令删除表中全部记录后,表结构依然存在。

小结:

本次课主要介绍表的基本操作。通过本课学习应掌握表的打开和关闭方法,记录的浏览、定位、修改和删除方法。其中使用的命令及其格式、功能是本次课的重点和难点。

作业:

Page 84 习题四3、(7)(8)

实验二 链表操作实现

实验二链表操作实现 实验日期: 2017 年 3 月 16 日 实验目的及要求 1. 熟练掌握线性表的基本操作在链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的链式存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 实验容 已知程序文件linklist.cpp已给出学生身高信息链表的类型定义和基本运算函数定义。 (1)链表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct node{ datatype data; /*数据域*/ struct node *next; /*指针域*/ } LinkNode, *LinkList; (2)带头结点的单链表的基本运算函数原型 LinkList initList();/*置一个空表(带头结点)*/ void createList_1(LinkList head);/*创建单链表*/ void createList_2(LinkList head);/* 创建单链表*/ void sort_xh(LinkList head);/*单链表排序*/ void reverse(LinkList head);/*对单链表进行结点倒置*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(LinkList head);/*打印单链表*/ void save(LinkList head,char strname[]);/*保存单链表到文件*/

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

数据结构 单链表基本操作代码

实验一单链表 #include "stdio.h" #include "stdlib.h" typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void creatLNode(LinkList &head) { int i,n; LNode *p; head=(LNode*)malloc(sizeof(LNode)); head->next=NULL; printf("请输入链表的元素个数:"); scanf("%d",&n); for(i=n;i>0;i--) { p=(LNode*)malloc(sizeof(LNode)); printf("第%d个元素:",i); scanf("%d",&p->data); p->next=head->next; head->next=p; } } void InsertLNode(LinkList &L) { LNode *p=L; int i,j=0,e; printf("请输入你要插入的位置(超过链表长度的默认插在最后!):"); scanf("%d",&i); printf("请输入你要插入的元素:"); scanf("%d",&e); while (p->next&&jnext; ++j; }

LNode *s; s=(LNode*)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; } int DeleteLNode(LinkList &L,int i,int &e) { LNode *p; p=L; LNode *q; int j=0; while (p->next&&jnext; ++j; } if(!(p->next)||j>i-1) { printf("删除位置不合理!\n"); return 0; } q=p->next; p->next=q->next; e=q->data; free(q); return e; } void DeleteCF(LinkList &L) { LNode *p,*s,*r; p=L->next; while(p!=NULL) { r=p; s=r->next; while(s!=NULL) { if(p->data==s->data) { r->next=s->next; s=s->next;

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、熟练掌握线性表的插入、删除等操作。

数据结构实现顺序表的各种基本运算(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

实验一 线性表的基本操作

实验一线性表的基本操作 一、实验目的 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.顺序表的实践 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

顺序表的基本操作

《数据结构》实验报告一 顺序表的基本操作 班级:网络工程学号: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个整数

单链表的基本操作

上机实验报告 学院:计算机与信息技术学院 专业:计算机科学与技术(师范)课程名称:数据结构 实验题目:单链表建立及操作 班级序号:师范1班 学号:201421012731 学生姓名:邓雪 指导教师:杨红颖 完成时间:2015年12月25号

一、实验目的: (1)动态地建立单链表; (2)掌握线性表的基本操作:求长度、插入、删除、查找在链式存储结构上的实现; (3)熟悉单链表的应用,明确单链表和顺序表的不同。 二、实验环境: Windows 8.1 Microsoft Visual c++ 6.0 三、实验内容及要求: 建立单链表,实现如下功能: 1、建立单链表并输出(头插法建立单链表); 2、求表长; 3、按位置查找 4、按值查找结点; 5、后插结点; 6、前插结点 7、删除结点; 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个单链表。 2、编写实现相关功能函数,完成子函数模块。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。

五、代码: #include #include typedef char datatype; typedef struct node { datatype data; struct node *next; }linklist; linklist *head,*p; //头插法建立单链表 linklist *Creatlistf() { char ch; linklist *head,*s; head=NULL; ch=getchar(); printf("请输入顺序表元素(数据以$结束):\n"); while(ch!='$') { s=(linklist *)malloc(sizeof(linklist)); s->data=ch; s->next=head; head=s; ch=getchar(); } return head; } //求单链表的长度 void get_length(struct node *head) { struct node *p=head->next; int length=0;

实验一 线性表基本操作的编程实现

实验一线性表基本操作的编程实现 【实验目的】 线性表基本操作的编程实现 要求: 线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。 【注意事项】 1.开发语言:使用C。 2.可以自己增加其他功能。 【思考问题】 1.线性表的顺序存储和链表存储的差异?优缺点分析? 2.那些操作引发了数据的移动? 3.算法的时间效率是如何体现的? 4.链表的指针是如何后移的?如何加强程序的健壮性? 【参考代码】(以下内容,学生任意选择一个完成即可) (一)利用顺序表完成一个班级学生课程成绩的简单管理 1、预定义以及顺序表结构类型的定义 (1) #include #include #define ListSize 100 //根据需要自己设定一个班级能够容纳的最大学生数 (2) typedef struct stu { int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩 }STUDENT; //存放单个学生信息的结构体类型 typedef struct List { STUDENT stu[ListSize]; //存放学生的数组定义,静态分配空间

顺序表的基本操作 (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*/

链表的基本操作(基于C)

#include #include struct Student { char cName[20]; int iNumber; struct Student* pNext; }; int iCount; struct Student* Create() { struct Student* pHead=NULL; struct Student* pEnd,*pNew; iCount=0; pEnd=pNew=(struct Student*)malloc(sizeof(struct Student)); printf("please first enter Name ,then Number\n"); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); while(pNew->iNumber!=0) { iCount++; if(iCount==1) { pNew->pNext=pHead; pEnd=pNew; pHead=pNew; } else { pNew->pNext=NULL; pEnd->pNext=pNew; pEnd=pNew; } pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); } free(pNew); return pHead; }

void Print(struct Student* pHead) { struct Student *pTemp; int iIndex=1; printf("----the List has %d members:----\n",iCount); printf("\n"); pTemp=pHead; while(pTemp!=NULL) { printf("the NO%d member is:\n",iIndex); printf("the name is: %s\n",pTemp->cName); printf("the number is: %d\n",pTemp->iNumber); printf("\n"); pTemp=pTemp->pNext; iIndex++; } } struct Student* Insert(struct Student* pHead) { struct Student* pNew; printf("----Insert member at first----\n"); pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); pNew->pNext=pHead; pHead=pNew; iCount++; return pHead; } void Delete(struct Student* pHead,int iIndex) { int i; struct Student* pTemp; struct Student* pPre; pTemp=pHead; pPre=pTemp; printf("----delete NO%d member----\n",iIndex); for(i=1;i

实验一 线性表基本操作

实验一线性表基本操作 (4课时) 一、实验目的 掌握线性表的顺序表和链表的基本操作:建立、插入、删除、查找、合并、打印等运算。 二、实验要求 1.格式正确,语句采用缩进格式; 2.设计子函数实现题目要求的功能; 3.编译、连接通过,熟练使用命令键; 4.运行结果正确,输入输出有提示,格式美观。 5.输入数据至少三组,分别代表不同的情况,以测试程序的正确性。 6.将运行结果截图,并粘在文档的相应位置。 三、实验环境 1.turboc2,win-tc,VC++ 四、实验内容和步骤 1.编程实现在顺序存储的有序表中插入一个元素。 2.编程实现把顺序表中从i个元素开始的k个元素删除。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成(an,…..a2,a1)。4.约瑟夫环问题。 约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。 利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。 例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。 五、根据实验过程填写下面内容 1.写出第1题的程序并写出运行结果和分析。 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define ElemType int #define MAXSIZE 100 typedef struct//顺序表申明 { ElemType elem[MAXSIZE]; int last; }SeqList;

顺序表的实现

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

实验名称:顺序表的实现 一.实验目的: 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表示顺序表中数据元素的个数 };

单链表的基本操作 C语言课程设计

课程设计(论文) 题目名称单链表的基本操作 课程名称C语言程序课程设计 学生姓名 学号 系、专业信息工程系、网络工程专业 指导教师成娅辉 2013年6月6 日

目录 1 前言 (3) 2 需求分析 (3) 2.1 课程设计目的 (3) 2.2 课程设计任务 (3) 2.3 设计环境 (3) 2.4 开发语言 (3) 3 分析和设计 (3) 3.1 模块设计 (3) 3.2 系统流程图 (4) 3.3 主要模块的流程图 (6) 4 具体代码实现 (9) 5 课程设计总结 (12) 5.1 程序运行结果 (12) 5.2 课程设计体会 (12) 参考文献 (13) 致谢 (13)

1 前言 我们这学期学习了开关语句,循环语句、链表、函数体、指针等的应用,我们在完成课程设计任务时就主要用到这些知识点,本课题是单链表的简单操作,定义四个子函数分别用来创建链表、输出链表、插入数据以及删除数据,主函数中主要用到开关语句来进行选择调用哪个子函数,下面就是课程设计的主要内容。 2 需求分析 2.1 课程设计目的 学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。 2.2 课程设计任务 输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。 2.3 设计环境 (1)WINDOWS 7系统 (2)Visual C++ 2.4 开发语言 C语言 3 分析和设计 3.1 模块设计 定义链表结点类型struct node表示结点中的信息,信息包括数据域data(用于存放结点中的有用数据)以及指针域next(用于存放下一个结点的地址),并将链表结点类型名改为NODE。如下所示:

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

数据结构实验报告-顺序表的创建、遍历及有序合并操作二、实验内容与步骤 实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下: 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");

单链表的建立及其基本操作的实现(完整程序)

#include "stdio.h"/*单链表方式的实现*/ #include "malloc.h" typedef char ElemType ; typedef struct LNode/*定义链表结点类型*/ { ElemType data ; struct LNode *next; }LNode,*LinkList;/*注意与前面定义方式的异同*/ /*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/ LinkList CreateList_L(LinkList head) { ElemType temp; LinkList p; printf("请输入结点值(输入0结束)"); fflush(stdin); scanf("%c",&temp); while(temp!='0') { if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z')) { p=(LinkList)malloc(sizeof(LNode));/*生成新的结点*/ p->data=temp; p->next=head->next; head->next=p;/*在链表头部插入结点,即头插法*/ } printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); } return head; } /*顺序输出链表的内容*/ void ListPint_L(LinkList head) { LinkList p; int i=0; p=head->next; while(p!=NULL) { i++; printf("单链表第%d个元素是:",i);

线性表的基本操作

实验一:线性表的基本操作 1.实验目的: 1)掌握用VC++上机调试线性表的基本方法; 2)掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。 2.实验内容: 1)线性表建立、插入、删除操作实现; 2)已知有序表SA,SB,其元素均为递增有序,将此两表归并成一个新有序表SC,且SC中的元素仍然递增有序。 #include #include #define OK 1 #define ERROR 0 typedefstruct Node { int data; struct Node *next; }Node,*LinkList; void InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } void CreateFromTail(LinkList L) { Node *r,*s; int flag=1; int c; r=L;

printf("尾插法建立单链表,输入-1结束\n"); while(flag) { scanf("%d",&c); if(c!=-1) { s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; } else { flag=0; r->next=NULL; } } } void printL(LinkList L) { Node *p; p=L; while(p->next!=NULL) { printf("%d ",p->next->data); p=p->next; } printf("\n"); } int InsertList(LinkList L,int i,int e) { Node *pre,*s; int k; if(i<1) { return ERROR; } pre=L; k=0; while(pre!=NULL&& k

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

单链表基本操作实验

实验2 链表的操作 实验容: 1)基础题:编写链表基本操作函数,链表带有头结点 (1)CreatList_h()//用头插法建立链表 (2)CreateList_t()//用尾插法建立链表 (3)InsertList()向链表的指定位置插入元素 (4)DeleteList()删除链表中指定元素值 (5)FindList()查找链表中的元素 (6)OutputList()输出链表中元素 2)提高题: (1)将一个头节点指针为heada的单链表A分解成两个单链表A和B,其头结点指针分别为heada和headb,使得A表中含有原单链表A中序号为奇数的元素,B表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。 (2)将一个单链表就地逆置。 即原表(a1,a2,。。。。。。 an),逆置后新表(an,an-1,。。。。。。。a1) /* 程序功能 :单链表基本功能操作 编程者 :天啸 日期 :2016-04-14 版本号 :3.0 */ #include #include typedef struct List { int data; struct List *next; }List; void CreatList_h(List *L) //头插法 { int i = 0; int n = 0; int goal; List *p; printf("请输入数据的个数:\n"); scanf("%d",&n); L -> next = NULL; for(i=0;i

{ printf("请输入第%d个数:\n",i+1); scanf("%d",&goal); p = (struct List*)malloc(sizeof(struct List)); p -> data = goal; p -> next = L->next; //将L指向的地址赋值给p; L -> next = p; } } void CreateList_t(List *L) //尾插法 { int i; int n; int goal; List *p; List *q=L; printf("请输入数据的个数:\n"); scanf("%d",&n); for (i=0;i data = goal; q -> next = p; q = p; } q -> next = NULL; } void InsList(List *L,int i,int e) //插入 { List *s; List *p = L; int j = 0; while (p&&jnext; ++j; } s = (struct List*)malloc(sizeof(struct List)); s -> data = e; //插入L中

相关文档
最新文档