文档视界 最新最全的文档下载
当前位置:文档视界 › 有序顺序表的合并

有序顺序表的合并

有序顺序表的合并
有序顺序表的合并

实验题目:有序顺序表的合并

一、实验目的

掌握顺序表的基本操作

理解并分析算法的时间复杂度

二、实验内容

实现两个有序(从小到大)顺序表合并成为一个有序顺序表,合并后的结果放在第一个顺序表中(假设这两个有序顺序表中没有相同的元素)。

三、设计与编码

1、基本思想

大体上的方法与“有序顺序表的插入”方法类似。创建两个数组,实现两个有序顺序表。需定义第二个表长length2,逐个将第二个顺序表中的数据与第一个数据表中的数据对比大小,并按大小顺序排列、合并,生成第三个表。最后输出。

2、编码

#include

using namespace std;

const int MaxSize=200;

class SeqList

{ public:

SeqList(int a[],int n);

int Length();

void Insert(int b[],int length2);

void PrintList();

private:

int data[MaxSize];

int length;

};

SeqList::SeqList(int a[],int n)

{int i;

if(n>MaxSize)throw"参数非法";

for(i=0;i

data[i]=a[i];

length=n;

}

int SeqList::Length()

{

return length;

}

void SeqList::Insert(int b[],int length2)

{ int j,h,i=0;

for( j=0;j

{if(b[i]

{ for(h=length;h!=j;--h)

data[h]=data[h-1];

data[j]=b[i];

++length;

++i;

}

else if(j==length-1&&b[i]>data[length-1]) {

data[length]=b[i];

length++;

++i;

}

}

}

void SeqList::PrintList()

{for(int i=0;i

cout<

cout<

}

void main()

{

int a[6]={1,5,8,10,15,21};

int b[3]={6,13,18};

SeqList s(a,6);

SeqList c(b,3);

cout<<"合并前的顺序表A"<

s.PrintList();

cout<<"合并前的顺序表B"<

c.PrintList();

cout<<"合并后的顺序表C"<

int x=c.Length();

s.Insert(b,x);

s.PrintList();

}

四、调试与运行

1、调试时遇到的主要问题及解决

括号、花括号未正确配对,出现混乱导致编译出错;

第一次运行成功,由于数组输出语句为cout<

经调整数组输出语句为cout<

2、运行结果(输入及输出,可以截取运行窗体的界面)

五、实验心得

写程序代码时务必认真。

实验一 数据结构顺序表的插入和删

实验一顺序表的操作 1.实验题目:顺序表的操作 2.实验目的和要求: 1)了解顺序表的基本概念、顺序表结构的定义及在顺序表上的基本操作(插入、删除、查找以及线性表合并)。 2)通过在Turbo C(WinTc,或visual stdio6)实现以上操作的C语言代码。 3)提前了解实验相关的知识(尤其是C语言)。 3.实验内容:(二选一) 1)顺序表的插入算法,删除算法,顺序表的合并算法 2)与线性表应用相关的实例(自己选择详尽实例) 4.部分参考实验代码: ⑴顺序表结构的定义: #include #define MAXLEN 255 typedef int ElemType; typedef struct { ElemType elem[MAXLEN]; int length; }sqList; ⑵顺序表前插(在第i号元素前插入一个新的元素) int ListInsert(sqList *la,int i,int x)

{ int j; if(i<0||i>la-> length +1) {printf(“\n the value of i is wrong!”); return 0; } if(la-> length +1>=MAXLEN) { printf(“\n overflow!”); return 0; } . for(j=la-> length;j>=i;j--) la->list[j+1]=la->list[j]; la->list[i]=x; la-> length++; return 1; } ⑶顺序表删除 int ListDelete(sqList *la,int i) { if(i<0||i>la-> length) { printf(“\n the position is wrong!\n”); return 0; }

实验1-2顺序表和链表基本操作_参考答案

实验1、2:线性表的应用参考代码 一、实验预备知识 1.复习C中编写函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次顺序表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15)

单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法均可)。 3.编写单链表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次单链表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对链表中元素从小到大排列。 7.向有序链表分别插入20和50,插入后表仍然有序。 五、实验结果 顺序表源程序: #include using namespace std; const int MAXSIZE=8; //做有序表插入操作时,将8改为15 typedef int DataType; typedef struct { DataType data[MAXSIZE]; int length; }SeqList; void Init_SeqList(SeqList &L);//创建空顺序表算法 void Show_SeqList(SeqList L);//顺序表输出算法 void Create_SeqList(SeqList &L);//顺序表创建算法 int Insert_SeqList(SeqList &L,DataType x,int i);//顺序表的插入算法 int Delete_SeqList(SeqList &L,int i);//顺序表的删除算法 int Locate_SeqList(SeqList L,DataType x);//顺序表的按值查找算法

数据结构实验报告 有序表合并

实验有序表合并姓名:窦晓磊班级:软件工程142 学号:1413032042 试验时间:2015.10.11

1.问题描述 把两个有序表归并为一个有序表。 2.数据结构设计 链表结点的结构为: Typedef struct Node{ T data; Node *next; }; 3.算法设计 (1)表的输入和输出。 设计一个输入输出函数Node *CreateList()。 Step1:设计指针。 Node *q, //工作指针,存储head *Head, //头指针 *p; //工作指针,存储数据 int size, //用于存储有序表元素的个数 n; //元素的输入 Step2:利用指针进行输入。 q=Head=new Node; //建立头结点 利用循环输入 for(int i=1;i<=n;i++) { p=new Node; //建立结点 cin>>n; //输入元素 p->data=n; //将输入的元素赋值给链表 Head->next=p; //尾指针后移 Head=p; //指向下一个结点 Head=p; } Head->next=NULL; //设置尾指针 Head=q; Step3:输出。 for(p=Head->next;p!=NULL;p=p->next) cout<data; Return Head; //返回Head所指的链表 (2)合并算法 1’初始化 Step1:设置工作指针pa、pb,分别指向两个有序表LA、LB的首元结点。 Node *pa,*pb; //工作指针pa,pb pa=LA->next;pb=LB->next; Step2:生成新表LC的头结点,工作指针pc指向LC。 Node *pc;

数据结构实验两个有序顺序表的合并

南昌大学实验报告 学生姓名:李木子学号:专业班级:软工实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 两个有序顺序表的结合 二、实验目的 顺序表的创建 .实现顺序表的追加 .实现顺序表的显示 .两顺序表的合并 三、实验基本原理 四、主要仪器设备及耗材 电脑, 五、实验步骤 ******************************************* * 顺序表的创建 * * .实现顺序表的追加 * * .实现顺序表的显示 * * .两顺序表的合并 * ******************************************* <> <> ; ************************************ * 顺序表结构体的定义 *

************************************ { []; ; }; ************************************ * 函数声明 * ************************************ (*); (*); (); (); (*); (*); (***); ************************************ * 顺序表的初始化函数 * ************************************ (*) { >; } ************************************ * 顺序表的追加函数 * ************************************ (*) { (>) { ("\顺序表是满的!"); (); } >[>]; >>; }

顺序表的基本操作 (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、基本思想 大体上的方法与“有序顺序表的插入”方法类似。创建两个数组,实现两个有序顺序表。需定义第二个表长length2,逐个将第二个顺序表中的数据与第一个数据表中的数据对比大小,并按大小顺序排列、合并,生成第三个表。最后输出。 2、编码 #include using namespace std; const int MaxSize=200; class SeqList { public: SeqList(int a[],int n); int Length(); void Insert(int b[],int length2); void PrintList(); private: int data[MaxSize]; int length; }; SeqList::SeqList(int a[],int n) {int i; if(n>MaxSize)throw"参数非法"; for(i=0;i

return length; } void SeqList::Insert(int b[],int length2) { int j,h,i=0; for( j=0;jdata[length-1]) { data[length]=b[i]; length++; ++i; } } } void SeqList::PrintList() {for(int i=0;i

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

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

有序顺序表合并

1.问题描述 设计一个两个顺序表合的程序。根据用户输入的两个顺序表将其合并后并输出;例如:输入:1 2 3和2 3 5合并后得到:1 2 2 3 3 5;输入:1 3 6 9和2 4 7 8得到1 2 3 4 6 7 8 9 2.设计要求 输入的顺序表非递减,输出的顺序表也要非递减 3.数据结构 本课程设计采用顺序表作为实现该问题的数据结构。结构体中含有数组指针和数组长度具体定义如下: typedef struct{ DataType *elem; int length;//顺序表长度 }Seqlist; 4.分析与实现 程序执行包括:构造顺序表,实现顺序表相加; (1)包含必要的头文件 #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR -1 typedef int DataType; typedef struct{ DataType *elem; int length; }Seqlist;; void Creat(Seqlist &LA,int n);//构造顺序表 void ADD(Seqlist LA,Seqlist LB,Seqlist &LC);//合并顺序表 (2)构造顺序表的模块 void Creat(Seqlist &LA,int n) { LA.length=n; LA.elem=new DataType[LA.length];//申请内存 for(int i=0;i>LA.elem[i]; } } (3)实现顺序表合并的模块 void ADD(Seqlist LA,Seqlist LB,Seqlist &LC) { Seqlist *pa,*pb,*pc;//分别定义指向顺序表LA,LB,LC其中LC用来存储合并后 的表

实验报告03-两个有序链表的合并

实验目的及要求: 了解和掌握链表的特点; 掌握链表基本操作的实现; 掌握两个有序链表合并的算法 要求完成链表的初始化、插入、有序表合并、显示操作的实现。实验设备环境及要求: PC机一台,内存要求128M以上,VC++6.0集成开发环境。 实验内容与步骤: 1、在VC++6.0环境中新建一个工程和C++文件; 2、实现链表初始化、插入、有序合并算法,代码如下: #include #include typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; int InitList_L(LinkList &L){ L= (LinkList)malloc(sizeof(LNode)); L->next=NULL; return 1; } int ListInsert_L(LinkList &L,int i,ElemType e){ LinkList p; p=L; int j=0; while(p&&jnext; ++j; } if(!p||j>i-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return 1; } void Disp_L(LinkList L){

LinkList p=L->next; if(!p) printf("此链表为空!"); while(p){ printf("%d",p->data); p=p->next; } printf("\n"); } void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ LinkList pa=La->next; LinkList pb=Lb->next; LinkList pc=Lc=La; while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; } else{ pc->next=pb;pc=pb;pb=pb->next; } } pc->next=pa?pa:pb; free(Lb); } void main(){ LinkList La,Lb,Lc; InitList_L(La); InitList_L(Lb); InitList_L(Lc); ListInsert_L(La,1,2); ListInsert_L(La,2,3); ListInsert_L(La,3,5); Disp_L(La); ListInsert_L(Lb,1,1); ListInsert_L(Lb,2,4); ListInsert_L(Lb,3,6); ListInsert_L(Lb,4,7); Disp_L(Lb); MergeList_L(La,Lb,Lc); printf("合并之后的链表为:\n"); Disp_L(Lc); }实验指导与数据处理:

实验一数据结构顺序表的插入和删除

实验一顺序表的操作 1. 实验题目:顺序表的操作 2.实验目的和要求: 1)了解顺 序表的基本概念、顺序表结构的定义及在顺序表上的基本操作(插入、 删除、查找以及线性表合并 )。 2)通过在 Turbo C ( WinTc ,或 visual stdio6 )实现以上操作的 C 语言 代码。 3)提前了解实验相关的知识(尤其是 C 语 言)。 3.实验内容:(二选一) 1) 顺序表的插入算法, 删除算法, 顺序表的合并算法 2) 与线性表应用相关的实例( 自己选择具体实例) 4.部分参考实验代码: ⑴ 顺序表结构的定义: #include #define MAXLEN 255 typedef int ElemType; typedef struct { ElemType elem[MAXLEN]; int length; }sqList; ⑵ 顺序表前插(在第i 号元素前插入一个新的元素) int ListInsert(sqList *la,int i,int x) { int j; if(i<0||i>la-> length +1) { printf( “ n the value of i is wrong! ” ); return 0; } if(la-> length +1>=MAXLEN) { printf( “ n overflow! ” ); return 0; }

. for(j=la-> length;j>=i;j--) la->list[j+1]=la->list[j]; la->list[i]=x; la-> length ++; return 1; } ⑶ 顺序表删除 int ListDelete(sqList *la,int i) { if(i<0||i>la-> length ) { printf( “ return 0; n”); } for(i;i length;i++) la->list[i-1]=la->list[i]; la-> length --; return 1; } 5.附录:实验预备知识: ⑴ 复习 C 语言中数组的用法。 ⑵ 了解线性表和顺序表的概念,顺序表的定义方法; 线性表是n 个数据元素的有限序列,至于每个数据元素的具体含义,在不同的情况下各不相同。 顺序表是线性表的顺序存储表示,是用一组地址连续的存储单元依次存储线性表的数据元素。 在 C 语言中,顺序表是用数组来实现的。 ⑶ 掌握线性表在顺序存储结构上实现基本操作:查找、插入、删除和 合并的算法。 在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容: 在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出未查到提 示)。 在实现插入的时候,首先要判断该顺序表是否为满,如为满则报错 (此时要注意:顺序表是用数组来实现的,它不能随机分配空 间);如不为满,则需判断要插入的位置是否合法(例如:如果 一个线性表的元素只有10 个,而要在第0 个元素前插入或在第 11 个元素后插入就为不合法)。其次要注意是前插还是后插,两

实验一-顺序表的设计与实现

实验一顺序表的设计与实现 一.实验目的 1.进一步熟悉VC环境,会在其中编写调试运行c++代码,并理解多文件项目的组织,为以后的实验编程做准备。 2.掌握在VC环境中进行代码的调试 3.掌握顺序表的设计过程,并能通过一实例对设计的顺序表进行测试。 二、实验内容 1.顺序表的设计(Sqlist.h):设计头文件sqlist.h,其内容如下: ①类型设计 ②基本操作的设计(包括初始化、求数据元素个数、插入、删除、取数据元素等) (补充完整) #define LIST_INIT_SIZE 10 #define LIST_INCREMENT 2 //线性表的动态分配顺序存储结构 struct SqList { ElemType *elem; int length; int listsize; }; //顺序表的初始化 void InitList(SqList &L) { //动态分配存储空间,并将分配到的存储空间的首地址保持在顺序表的elem项中 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); //将顺序表的长度初始化为0 L.length=0; //将顺序表的容量初始化为分配的空间数 L.listsize=LIST_INIT_SIZE; }

//在线性表的第i个位置上插入数据元素e Status ListInsert(SqList &L,int i,ElemType e) { ElemType *newbase,*q,*p; //判断插入的位置是否合理,不合理则返回错误信息 if(i<1||i>L.length+1) return ERROR; //判断是否有足够的空间插入元素,空间不够则增补空间 if(L.length==L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType )); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LIST_INCREMENT; } //插入数据元素(先将第i个元素及其后所有元素后移一个位置) q=L.elem+i-1; for(p=L.elem+L.length-1;p>=q;--p) *(p+1)=*p; //将元素e插入到第i个位置 *q=e; //线性表的长度增加1 ++L.length; return OK; } //删除线性表中第i个数据元素 Status ListDelete(SqList &L,int i,ElemType &e) { ElemType *p,*q; //判断删除的元素是否存在,不存在则返回错误信息 if(i<1||i>L.length) return ERROR; //将第i+1个元素及其后所有元素前移一个位置,实现元素的删除 p=L.elem+i-1; e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)

合并报表操作步骤及顺序

合并报表U861 操作指南 包括操作步骤和操作数据两部分。 1.0操作步骤 1.1初始设置 合并报表系统是用友ERP-U8管理软件中的一个组成部分,他的初始工作分别在系统管理和企业平台中进行。例如:合并报表的公司设立工作是在企业平台中进行的,这是合并报表系统正常使用的先决条件。 1.安装、启用 2.在U8【系统管理】建立集团账套,集团账套必须到服务器上以admin的身份登陆建立。 3.在U8【系统管理】设立用户及授予功能权限。 ◆注意:在合并报表系统中,系统管理这里的设置只是功能权限的一部分,它还将同 分析公司、非分析公司的功能权限相结合,共同组成合并报表系统中完整的功能权 限控制。 4.设立实体公司:在U8【企业平台】-【基础档案】-【企业目录】对账套所属集团的实 体公司进行设定。 5.设立用户数据权限:在U8【企业平台】-【数据权限设置】对用户进行可操作公司的数 据权限设置。 6、登陆合并报表系统 ◆注意:第一次登陆时,应该以具有建立私有数据库、分析公司管理权限的用户身 份登陆。 7.建立私有数据库 8.分析公司管理 分析公司:在合并报表系统中,分析公司是指可以拥有该系统所有功能权限的公司,通常您可以理解为是合并工作的主体公司,他完成的主要工作是定义合并科目、抵销关系、下发样表、采集数据、执行生成合并或汇总报表、完成检索分析等功能。在合并报表系统中,对分析公司的管理还主要体现在为该公司分配一个私有数据库。 非分析公司:他在合并工作中只能完成采集数据和内部往来对账的功能,即按分析公司下发的样表格式,填报本单位的个别报表、内部交易数据,核对本单位与集团内其他单位之间的内部往来数据。 1.2公司分类

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

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

return NULL; } L->length=0; L->listsize=MAXSIZE; return L; } int CreateList(SqList* L) //创建顺序表(非空) { int number; //顺序表中元素的个数 int i; //循环变量 printf("请输入顺序表中元素的个数:"); scanf("%d",&number); if(number > MAXSIZE) //一定要判断输入的个数是否大于顺序表的最大长度 { printf("输入个数大于顺序表的长度\n"); return 0; } for(i=0;ielem+i); //L->elem+i:每次的

顺序表题目

完整程序设计 1. 在顺序存储结构的职工工资表中,职工工资信息包括:职工号(no)、姓名(name)、职称(pro)、工资(sal)等四项信息,请编写一完整的程序,实现以下功能: (1)创建信息表:从键盘读入所有职工的信息。(3分) (2)删除:给定职工号,删除该职工的信息。(6分) (3)修改:对职称为“教授”的职工工资加100。(4分) (4)在显示器(屏幕)上显示所有职工的各项信息。(3分) (5)主程序以菜单的方式调用以上功能。(4分) 元素类型及顺序表类型定义如下: typedef struct { char no[8],name[10],pro[6]; float sal; } DataType; typedef struct { DataType data[MAXLEN+1]; int len; }SeqList; 2.图书管每本图书包含:书号(no)、书名(name)、现存量(newnum)、总库存量(sumnum)四项信息,编写完整程序通过顺序表实现: (1)初始化:录入现有的所有图书的四项信息。(3分) (2)借书:每本书每次只能借一本,如果库中有该书,则允许借阅并使该书的现存量减1,否则给出相应提示信息。(4分) (3)价值估算:统计库中所有书的价钱。价钱为所有书的单价乘以库存量的累加和。(4分) (4)显示:显示图书管所有藏书信息。(3分) (5)主程序以菜单的方式调用以上功能。(4分) 元素类型及顺序表类型定义2分。 3.设有两个整型顺序表L1,L2,其元素值递增有序存放,请定义该顺序表的元素类型及表类型(2分);设计以下自定义函数: (1)录入顺序表中所有元素的值。(3分) (2)将顺序表L1,L2合并为到另外一个顺序表L3中,L3中的元素非递减有序排列。(8分)

集团报表合并处理(顺序法合并)

集团报表合并处理操作步骤 总体合并流程: (1)设置报表项目—〉编制基本表(资产负债表、损益表、现金流量表、抵销表)—〉审批基本表、抵销表—〉分配给下级单位—〉下级单位接收、计算、审批、上报给上级单位—〉上级单位接收基本报表、抵销表—〉内部抵销(往来抵销、交易抵销)核对—〉差异处理—〉确认—〉自动生成抵销分录—〉审批—〉生成工作底稿—〉生成合并报表(小范围合并报表)(注:生成汇总报表与工作底稿无关) (2)上报合并报表(小范围合并报表)—〉接收合并报表(小范围合并报表)—〉内部抵销(往来抵销、交易抵销)核对—〉差异处理—〉确认—〉自动生成抵销分录—〉审批—〉生成工作底稿—〉生成合并报表(中范围合并报表) (3)上报合并报表(中范围合并报表)—〉接收合并报表(中范围合并报表)—〉内部抵销(往来抵销、交易抵销)核对—〉差异处理—〉确认—〉自动生成抵销分录—〉审批—〉生成工作底稿—〉生成合并报表(大范围合并报表) 一、将基本表、抵销表模板分配给下级各个公司使用。 (注:在集团“朗新信息”中分别制作基本表、抵销表、管理报表) 切换组织到制作报表模板的组织—〉功能菜单—〉财务会计—〉合并报表—〉系统设置—〉报表模板—〉个别报表模板—〉 1、个别报表模板审批 分别双击“月度基本报表模板”、“抵销表模板”在“工具”菜单中进行“审批” 2、个别报表模板分配 分别选中已经审批过的“月度基本报表模板”、“抵销表模板”—〉点击“模板分配”—〉选择合并范围,—〉勾选确认合并范围内需要下发的公司—〉确定 二、下级公司填报好基本表、抵销表(注:各个报表需要审批上报) 1、接收上级下发基本报表模板、抵销报表模板 切换到下级公司组织中—〉功能菜单—〉财务会计—〉报表—〉报表编制—〉报表制作—〉新建报表—〉勾选“选用集团模板创建报表”后,在模板处选择集团分配下来的模板—〉选择生成日期—〉确定(注意:新建报表的期间选择)

顺序表基本操作的实现

1、顺序表基本操作的实现 [问题描述] 在顺序表中查找值为x的元素的位置,在线性表的某个位置插入一个元素,删除线性表某个位置的元素。 [基本要求] 要求建立生成顺序表,可以键盘上读取元素,用顺序存储结构实现存储。 [实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。[建议步骤] 1)建立顺序表的存储结构; 2)利用1)的存储结构建立有实际数据的数据表; 3)实现查找操作; 4)实现插入操作; 5)实现删除操作。 6)写出main函数测试上述操作。 实验源码: #include #define MAX 300 typedef int ElemType; typedef struct { ElemType data[MAX]; int length; }SqList; SqList L; //打印菜单 void menu() { printf("**************************************\n"); printf(" 顺序表操作的验证实验\n"); printf("**************************************\n"); printf(" 1、初始化表\n"); printf(" 2、创建表\n"); printf(" 3、按值查询\n"); printf(" 4、在指定位置插入一个元素\n"); printf(" 5、删除指定位置上的一个元素\n"); printf(" 6、输出表\n"); printf(" 0、退出\n"); printf("***************************************\n"); } //初始化表,置表长为0 void Init(SqList *L)

有两张单调递增有序的线性表A和B-采用顺序存储结构-将这两张表合并成C表-要求C表单调递减有序。Wo

/* Note:Your choice is C IDE */ #include "stdio.h" #include "stdlib.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define OVERFLOW -2 typedef int status; typedef int elemtype; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct{ elemtype *elem; int length; int listsize; }SqList;

status InitList_Sq(SqList *L)/*构造一个空的顺序表*/ { L->elem=(elemtype*)malloc(LIST_INIT_SIZE*si zeof(elemtype)); if(!L->elem) exit(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK; } void shengcheng_Sq(SqList *L)/*建立一个顺序表,含有n个数据元素。*/ { int m,n; printf("please enter some data:"); scanf("%d",&n); /*printf("请输入%d个元素:",n);*/

for(m=0;melem[m]); L->length++; } } void shuchu_Sq(SqList L)/*输出顺序表及顺序表的长度*/ { int i; /*printf("顺序表中的元素是:\n");*/ for(i=0;i< L.length;i++) { printf("%d", L.elem[i]); } printf("\n"); } void MergeList_Sq(SqList *La,SqList *Lb,SqList *Lc)/*将两个顺序有序表A和B合并为一个有序表

两个有序链表的合并

《数据结构》实验报告 班级:JS001001 姓名:周卫华学号:2010300028 E-mail:770234417@https://www.docsj.com/doc/3d330400.html, ◎实验题目: 将两个带头结点的有序循环链表合并成一个带头结点的有序循环链表 ◎实验目的:1.掌握使用visual c++6.0上机调试程序的基本方法。 2.掌握线性表的链式存储结构-循环链表的定义及C语言实现。 3.掌握线性表在链式存储结构-循环链表中的基本操作如将两个循环链表合并为一个循环链表的操作。 ◎实验内容:设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2分别为指向两个链表的头指针。将这两个链表合并为一个带头结点的有序循环链表。 一、需求分析 本程序需要实现将两个有序循环链表合成一个有序循环链表的功能,即对这个程序输入两个有序循环链表,该程序输出一个有序循环链表。对于输入的两个循环链表要求是必须是有序非递减的,如1,2,3,5,7符合输入条件,但是3,5,4,7,2,9则不符合输入条件。输入值可以是任意实数。输出的有序循环链表依赖于输入的两个有序循环链表。如输入的两个链表为1,3,4,6,8;2,5,7,9则输出的链表为1,2,3,4,5,6,7,8,9.上面展示了输入正确时的预期输出,当输入不正确时则不能得到正确的输出,如输入1,3,5,4,6;2,5,3,7时输出为1,2,3,5,4,5,3,6,7显然不正确。 二、概要设计 按照题意,本程序中使用单向循环链表作为存储结构,每一个节点为结构体类型,存放数据和下一个节点的地址。基本流程如下:定义三个该结构体类型的指针变量list1,list2,head;期中list1,list2用来构造存放输入数据的两个循环链表的头指针,head 用来作为生成的第三个循环链表的头指针。接下来主函数调用creat()函数并手工输入数据构成两个待合并链表。然后调用print()函数用来打印list1,list2来验证构造的链表正确。链表构造完成后调用mergell()函数来合并list1,list2并存放在head中,最后把head打印出来。本程序主要模块有:主程序模块,构造链表并输入数据模块,打印输出链表模块,合并链表模块。 三、详细设计 1.元素类型,节点类型和指针类型: 元素类型:int num;int lista=0,listb=0; 节点类型: struct list { int num; struct list *next; }; 指针类型:struct list *head,*end;struct list *pa,*pb,*pc; struct list *list1,*list2,; 2.每个模块的分析: (1)主程序模块: int main() //主函数

线性表(约瑟夫问题、有序表合并)数据结构实验报告

实验线性表 姓名:班级: 学号:实验时间: 一、约瑟夫问题 1.问题描述 设有编号为1,2,...,n(n>0)的n个人围成一圈,从约定编号k(1≤k≤n)开始报数,报到m的人出圈,然后从他的下一位开始新一轮报数。如此反复下去,直至所有人出圈。当任意给定n和m时,设计算法求n个人出圈的次序。 2.数据结构设计 采用循环单链表,可建立如下的结构体: struct Node { int data; Node *next; }; 3.功能划分及算法设计 规定的主要功能有创建无头节点的循环单链表、节点的删除与输出。 (1)创建无头节点的循环单链表(尾插法) p=new Node; p->next=p; p->data=1; for(int i=2;i<=n;i++) { s=new Node;//新建元素结点 s->data=i;//输入新建数据元素值 s->next=p->next;//新结点链入表尾 p->next=s; p=s; } (2)节点的删除与输出 Node *Delete_Print(Node *p,Node *pre)//删除、输出函数 { Node *q; cout<data<<" ";//输出需要删除的节点的数值 while(p->next!=pre)//p定位到删除点的前驱 { p=p->next;// } { q=p->next;// 暂存删除结点位置 p->next=q->next;//从链表中摘除删除结点

delete q;// 释放删除点 return p->next; } } 4.运行与测试 (1)运行程序,提示输入n,m,k,如图所示: (2)分别输入7、5、1,结果如下: 5.调试记录及收获 调试过程中经常会遇到与预计的删除节点偏差1-2个节点的情况,主要原因是:(1)链表创建完成后指针P未归位 (2)删除节点后指针P任然停留在原节点的前驱 (3)循环操作时计数器重置数设置错误 通过本次实验掌握并练习了循环单链表的创建与部分操作,进一步加深对单链表的认识,提高了实践操作水平。 6.源程序 #include//cout,cin struct Node { int data; Node *next; }; Node *Delete_Print(Node *p,Node *pre)//删除、输出函数 { Node *q; cout<data<<" ";//输出需要删除的节点的数值 while(p->next!=pre)//p定位到删除点的前驱 { p=p->next;// } { q=p->next;// 暂存删除结点位置

相关文档
相关文档 最新文档