两个线性表合并成一个线性表

两个线性表合并成一个线性表
两个线性表合并成一个线性表

#include

#include

//节点结构

struct LinkList

{

int data;

struct LinkList * next;

};

void main()

{

int a[8]={1,3,4,7,7,8,34,45};

int b[9]={1,2,4,7,9,12,33,43,56};

LinkList *pa=NULL;

LinkList *pb=NULL;

LinkList *pc=NULL;

LinkList *la=NULL;//la,lb,lc保存链表首地址

LinkList *lb=NULL;

LinkList *lc=NULL;

// 初始化单链表

for(int i=7;i>=0;i--)

{

pa=(LinkList *) malloc(sizeof(struct LinkList));

pa->data=a[i];

pa->next=la;

la=pa;

}

for(int j=8;j>=0;j--)

{

pb=(LinkList *) malloc(sizeof(struct LinkList));

pb->data=b[j];

pb->next = lb;

lb=pb;

}

lc=pc=(LinkList *) malloc(sizeof(struct LinkList));//LC指向单链表的头节点

//递增排序

while(pa && pb)

{

if( (pa->data) <= (pb->data) ) {

pc->next=pa;

pc=pc->next;

pa=pa->next;

}

else

{

pc->next=pb;

pc=pc->next;

pb=pb->next;

}

}

if(pa)

{

pc->next=pa;

}

if(pb)

{

pc->next=pb;

}

pc=lc->next;

while(pc)

{

printf("%d\t",*pc);

pc=pc->next;

}

printf("\n");

}

两个线性表合并成一个线性表

#include #include //节点结构 struct LinkList { int data; struct LinkList * next; }; void main() { int a[8]={1,3,4,7,7,8,34,45}; int b[9]={1,2,4,7,9,12,33,43,56}; LinkList *pa=NULL; LinkList *pb=NULL; LinkList *pc=NULL; LinkList *la=NULL;//la,lb,lc保存链表首地址 LinkList *lb=NULL; LinkList *lc=NULL; // 初始化单链表 for(int i=7;i>=0;i--) { pa=(LinkList *) malloc(sizeof(struct LinkList)); pa->data=a[i]; pa->next=la; la=pa; } for(int j=8;j>=0;j--) { pb=(LinkList *) malloc(sizeof(struct LinkList)); pb->data=b[j]; pb->next = lb; lb=pb; } lc=pc=(LinkList *) malloc(sizeof(struct LinkList));//LC指向单链表的头节点 //递增排序 while(pa && pb) {

if( (pa->data) <= (pb->data) ) { pc->next=pa; pc=pc->next; pa=pa->next; } else { pc->next=pb; pc=pc->next; pb=pb->next; } } if(pa) { pc->next=pa; } if(pb) { pc->next=pb; } pc=lc->next; while(pc) { printf("%d\t",*pc); pc=pc->next; } printf("\n"); }

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

实验项目名称:线性表的顺序存储结构上的基本运算 (所属课程:数据结构--用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;

线性表的基本操作

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++)

线性表的实现及操作(二)

实验一、线性表的实现及操作(一) 一、实验目的 了解和掌握线性表的顺序存储结构;掌握用C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算,以及对相应算法的性能分析。 二、实验要求 给定一段程序代码,程序代码所完成的功能为:(1)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用顺序表。 程序中有3处错误的地方,有标识,属于逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,修改后上机调试得到正确的运行结果。 (1)需求分析: 这份实验报告为所有必做题的实验报告。包括实验一顺序表建立、插入、删除等基本操作,实验二单链表的建立、插入、删除等基本操作,实验四二叉树的基本操作:树的建立、前序、中序、后序遍历及实验六图的遍历:深度优先和广度优先。这四份基础性的实验为改错性质,将每个实验题目中的错误改正过来并通过调试,有助于对基础知识的理解与强化记忆。

(2)概要设计: 实验一为对顺序线性表实现插入,删除,查找等基本操作。 需要用到的语句包括void ListInitiate(SeqList *L) int ListInsert(SeqList *L, int i, DataType x) int ListDelete(SeqList *L, int i, DataType *x) int ListGet(SeqList L, int i, DataType *x)等。 实验二是对单链表进行建立,插入,删除等基本操作。 需要的语句为void ListInitiate(SeqList *L) int ListInsert(SeqList *L, int i, DataType x) int ListDelete(SeqList *L, int i, DataType *x) int ListGet(SeqList L, int i, DataType *x)等。 实验四为二叉树,要求建立一个二叉树,并实现前序,中序及后序的遍历。所需语句包括void ListInitiate(SeqList *L) int ListInsert(SeqList *L, int i, DataType x) int ListDelete(SeqList *L, int i, DataType *x) int ListGet(SeqList L, int i, DataType *x)等。 实验六的内容是图的遍历包括邻接矩阵和邻接链表两种方法。 三、程序代码 (更正后的代码) #include #define MaxSize 100 typedef int DataType; typedef struct { DataType list[MaxSize]; int size;

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

线性表的插入和删除

实验一线性表的基本操作 一、实验目的 掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构上的运算。 二、实验要求 1、认真阅读和掌握本实验的程序。 2、上机运行本程序。 3、保存和打印出程序的运行结果,并结合程序进行分析。 4、按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单 和运行结果 三、实验内容 线性表基本操作的实现。 算法描述:对每一个算法,要写出算法的中文描述。本实验中要求写出在第i 个结点前插入数据为x的结点、删除指定结点、创建一个线性表、打印线性表的算法描述。 四、程序清单 1、sqlist.h文件清单: #include "stdio.h" #include "malloc.h" #define null 0 #define maxsize 1024 typedef char datatype; typedef struct { datatype data[maxsize]; int last; }sequenlist; /*在第i个结点前插入元素x(note:元素从0始计数)*/ int insert(sequenlist *L, datatype x,int i) { int j; if (L->last==maxsize-1)/*如果原线性表已经满了*/ { printf("overflow"); return 0; } else if ((i<0)||(i>L->last)) /*如果输入的i值超出范围*/ { printf("error,please input the right 'i'"); return 0; } else { for(j=L->last; j>=i; j--) /*从第i个元素起,每个元素后移一位*/ L->data[j+1]=L->data[j];

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

实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 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.掌握用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的人退出圈子,余下的人继续报数,编写程序,实现按退出

数据结构与算法(线性表)练习题

三、写一个算法合并两个已排序的线性表。(用两种方法:数组表示的线性表(顺序表)和指针表示的线性表(链表)) 要求:1、定义线性表节点的结构,并定义节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main 函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。 四、已知一个单向链表,试给出复制该链表的算法。 要求:1、定义线性表的节点的结构以及节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main 函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。 五、写出从一个带表头的单链表中删除其值等于给定值x 的结点的算法函数: int delete(LIST &L, int x);如果x 在该链表中,则删除对应结点,并返回其在链表中的位置(逻辑位置,第一个结点的逻辑位置为1),否则返回-1。 要求:1、定义线性表的节点的结构以及节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main 函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。 六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数: void Merge(cursor M, cursor N); 合并的方法是将N 链表中的所有结点添加到M 链表的后面,并将N 链表的表头结点添加到空闲结点链表中。 要求:1、定义静态链表的结点的结构以及结点的型SPACE 以及位置(position )和游标(cursor )的型。 2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q 加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M 中的位置为p 的元素后面添加一个值为x 的结点;void Delete (cursor M, position p ); 在链表M 中删除位置为p 的元素的后一个元素。 3、在1、2的基础上完成本题。 4、在main 函数中进行测试:先构建一个存储池,然后在该存储池中创建两个静态 表,最后将这两个静态表合并。 七、利用指针表示的线性表(链表)表示一个多项式,并实现两个多项式的相加和相乘运算。假设多项式形式为:11 11...)(e e m e m x a x a t a x A m m +++= -- 其中,系数a i ≠0,指数e i 满足e m >e m-1>…>e 2>e 1>=0。 要求:1、定义多项式每一项的结构。 2、定义两个多项式的相加和相乘运算函数。 3、在main 函数中,构建两个多项式,并测试相加和相乘运算。

线性表的合并

线性表的合并 #include #include #define listinitsize 100 #define OVERFLOW -1 /*线性表的定义*/ typedefstructsqlist { int *a; int length; intlistsize; }sqlist sqlistla,lb,lc; /*建立一个空表*/ sqlistinitlist() { sqlist l; l.a=(int*)malloc(listinitsize*sizeof(int)); if(!l.a) exit(OVERFLOW); l.length=0; l.listsize=listinitsize; return l; } sqlistcreatlist(sqlistl,intnum) { int j; int p; for(j=1;j<=num;j++) { scanf("%d",&p); la.a[j]=p; la.length++; } } /*合并两线性表*/ sqlistaddlist( sqlist la, sqlistlb, sqlistlc)

{ inti=1,j=1,k=1; while(i<=la.length&& j<=lb.length) { if(la.a[i]<=lb.a[j]) { lc.a[k]=lb.a[i]; i++; k++; } { lc.a[k]=la.a[j]; j++; k++; } } while(i<=la.length) { lc.a[k]=la.a[i]; k++; i++; } while(j<=lb.length) { lc.a[k]=lb.a[j]; k++; j++; } lc.length=k-1; returnlc; } /*打印线性表*/ voidprintlist(sqlist l) { inti=1; for(i=1;i<=l.length;i++) printf("%6d",l.a[i]);

线性表的操作算法讲解

数据结构实验报告 课题名称:线性表的操作算法姓名: 班级: 学号:

一、内容提要 1、掌握使用cFree上机调试线性表的基本方法; 2、分别用数组和链表作为存储结构,实现线性表的插入、删除、查找、排序、合并等操作。 二、实验要求 1、设计对线性表进行链式存储操作的内容; 2、写出相应程序; 3、保存和打印出程序的运行结果,并结合程序进行分析; 三、实验目的 1、理解数据结构中单链表的定义和建立。 2、掌握单链表中结点结构的C语言描述。 3、熟练掌握单链表的插入、删除、查找、排序、合并等算法的设计与C语言实现。 4、将理论与实际相结合,切实提高自己的逻辑能力和动手能力。 四、算法流程图 开始 创建 遍插删查查找查找合 历入除找前驱后继并 主函数 输出

结束 五、概要设计 1.界面设置 1.建立顺序表,输入数据元素 2.输出顺序表 3.在i位置插入元素e 4.删除第i个元素,返回其值 5.查找值为e的元素 6.清空顺序表 7.输出指定元素的前驱元素 8.输出指定元素的后继元素 9.将两个非递减的线性表la和lb合并成一个新的非递减的线性表0.结束程序运行 请输入您的选择(1,2,3,4,5,6,7,8,9,0) 2.功能函数说明与定义 //加载头文件 #include #include #define MAXSIZE 100 typedef int ElemType; //定义结构体类型 typedef struct {ElemType a[MAXSIZE]; int length; }SqList; SqList a,la,lb,lc; //以下是9个函数的声明 //顺序表的初始化-置空表 void init(SqList *slt); //创建顺序表 void creat_list(SqList *L); //输出顺序表 void out_list(SqList L); //插入 void insert_sq(SqList *L,int i,ElemType e); //删除 ElemType delete_sq(SqList *L,int i);

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

数据结构:线性表的基本运算及多项式的算术运算 一、实验目的和要求 实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。 要求: 能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。 二、实验环境(实验设备) 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

有两张单调递增有序的线性表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合并为一个有序表

对线性表的基本操作

#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);

链式存储线性表基本操作及有序单链表合并成有序单列表

//合并两个有序单链表,并返回合并后新链表的头指针 LNode MergeLink(LNode p1,LNode p2) { if(!p1) return p1; //如果链表为空,则直接返回另一个链表if(!p2) return p2; //如果链表为空,则直接返回另一个链表 LNode ph, p; //ph 合并后新链表的头指针 if(p1->value < p2->value) { ph = p1; p = p1; p1 = p1->next; } else { ph = p2; p = p2; p2 = p2->next; } while(p1 && p2) { if(p1->value < p2->value) { p->next = p1; p = p1; p1 = p1->next; } else { p->next = p2; p = p2; p2 = p2->next; } } if(!p1) p->next = p2; if(!p2) p->next = p1; return ph; } //文件名:algo2-2.cpp #include #include

typedef char ElemType; typedef struct LNode //定义单链表结点类型 { ElemType data; struct LNode *next; } LinkList; void InitList(LinkList *&L) { L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点L->next=NULL; } void DestroyList(LinkList *&L) { LinkList *p=L,*q=p->next; while (q!=NULL) { free(p); p=q; q=p->next; } free(p); } int ListEmpty(LinkList *L) { return(L->next==NULL); } int ListLength(LinkList *L) { LinkList *p=L;int i=0; while (p->next!=NULL) { i++; p=p->next; } return(i); } void DispList(LinkList *L) { LinkList *p=L->next; while (p!=NULL) { printf("%c",p->data); p=p->next; }

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

实验一线性表基本操作的编程实现 【实验目的】 线性表基本操作的编程实现 要求: 线性表基本操作的编程实现(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]; //存放学生的数组定义,静态分配空间

线性表的基本操作

实验一:线性表的基本操作 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

线性表的合并

线性表的合并实例: #include #include using namespace std; const max=100; #define elemtype int typedef struct { elemtype * elem; //线性表的基地址 int length; //线性表当前的长度 int listsize; //线性表当前分配的最大存储内容容量}SeqList; void CreatList(SeqList *L) { cout<<"输入线性表当前长度:"; cin>>L->length; //分配空间 L->elem=(int*) malloc(L->length*sizeof(int)); cout<<"请输入线性表的各个元素:"; for(int i = 0;i< L->length;i++) {cin>>L->elem[i]; } L->listsize = L->length; } void MergeSeqList(SeqList *A, SeqList *B, SeqList *C) { elemtype *pa, *pb, *pc, *palast, *pblast; pa = A->elem; pb = B->elem; C->length = A->length + B->length; C->elem=(elemtype*)malloc(C->length*sizeof(elemtype)); if(!C->elem) exit(-1); palast = A->elem + A->length - 1; pblast = B->elem + B->length - 1; pc = C->elem; while(pa <= palast&&pb<= pblast) { if(*pa <= *pb) { *pc = *pa; pc++; pa++; } else{ *pc=*pb;

相关文档
最新文档