2022年数据结构实定义 .pdf
《2022年数据结构实定义 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构实定义 .pdf(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、数据结构实验题1 实验 1(C 语言补充实验)有顺序表A 和 B,其元素值均按从小到大的升序排列,要求将它们合并成一个顺序表C,且 C 的元素也是从小到大的升序排列。#include main() int n,m,i=0,j=0,k=0,a5,b5,c10;/*必须设个 m 做为数组的输入的计数器,不能用i,不然进行到while 时 i直接为 5*/ for(m=0;m=4;m+) scanf(%d,&am);/输入数组a for(m=0;m=4;m+) scanf(%d,&bm);/输入数组 b while(i5&j5) if(aibj)ck=bj;k+;j+; elseck=ai;k+;i
2、+;j+; / 使输入的两组数组中相同的数只输出一个 if(i5) for(n=i;n5;n+) ck=an;k+; else if(j5) for(n=j;n5;n+) ck=bn;k+; for(i=0;ik;i+) printf(%3d,ci); printf(n); 求 AB#include main() int i,j,k=0,a5,b5,c5; /A=a5,B=b5,A B=c5 for(i=0;i5;i+) scanf(%d,&ai);/输入 a 数组for(i=0;i5;i+) scanf(%d,&bi);/输入 b 数组for(i=0;i5;i+) for(j=0;j5;j+
3、) if(ai=bj)ck=ai;k+;/当有元素重复时,只取一个放入c 中 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 25 页 - - - - - - - - - 数据结构实验题2 for(i=0;ik;i+) printf(%3d,ci); printf(n); 实验 2(C 语言补充实验)已知一个有序整型数组,编程将一个整型数m 插入到该数组中,使得插入后的数组任然有序。#include #define N 4 main() int i,j,m,k,aN+1;
4、/k为最后输出数组的长度变量printf( 请输入有序整型数组a%dn,N); for(i=0;iN;i+) scanf(%d,&ai); printf( 请输入整型数mn); scanf(%d,&m); if(a0a1)/ 递增有序数组for(i=0;iN;i+) if(m=ai)k=N; break;/m和数组元素相同if(mi;j-) aj=aj-1; ai=m;k=N+1;break; if(i=N) k=N+1;aN=m;/m比所有元素大 if(a0a1)/ 递减有序数组for(i=0;iai)/m比当前元素大,数组右移for(j=N;ji;j-) aj=aj-1; ai=m;k=N
5、+1;break; if(i=N) k=N+1;aN=m;/m比所有元素小名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 25 页 - - - - - - - - - 数据结构实验题3 for(i=0;ik;i+) printf(%3d,ai); printf(n); 补充实验已知线性表LA 和 LB中的数据元素按值非递减有序排序,现要求将 LA 和 LB归并为一个新的线性表LC ,且 LC中的数据元素仍按值非递减有序排列。#include int Getelem(int
6、 a, int t);/声明得到数组元素函数void ListInsert(int b, int p,int q );/声明插入数组函数main() int m,i=0,j=0,k=0,LA5,LB5,LC10,ai,bj; for(m=0;m5;m+) scanf(%d,&LAm);/ 输入 La数组for(m=0;m5;m+) scanf(%d,&LBm);/ 输入 Lb 数组while(i5&j5) ai=Getelem(LA,i);/ 通过函数得到数组元素bj=Getelem(LB,j); if(aibj) ListInsert(LC,k+,bj); j+;/ 将较小的元素赋给新的数组
7、 else/ 相同的元素只要取一个 ListInsert(LC,k+,ai); i+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 25 页 - - - - - - - - - 数据结构实验题4 j+; while(i5)/ 此时 LB的元素都比LA小 ai=Getelem(LA,i); ListInsert(LC,k+,ai); i+;/ 直接将 LA 整体插入 LC while(j5)/ 此时 LA的元素都比LB小 bj=Getelem(LB,j); ListIn
8、sert(LC,k+,bj); j+;/ 直接将 LA 整体插入 LC for(i=0;ik;i+) printf(%3d,LCi); printf(n); int Getelem(int a,int t) return at; void ListInsert(int b,int p,int q) bp=q; 实验 3 输入 n 个整型数据,用链表的方法存储这些数据并输出。#include #include typedef struct LNode int date; struct LNode *next; LNode ,*LinkList;/ 此指针变量就是指LNode 类型的结构体void
9、 CreatList(LinkList *L,int n)/ 顺序输入 n 个元素的值,建立头结点L int i; LinkList p,S;/S 为暂存结点(*L)=(LinkList)malloc(sizeof(LNode); S=(LinkList)malloc(sizeof(LNode); (*L)-next=NULL; S=(*L); for(i=0;idate); p-next=S-next; S-next=p; S=S-next;/S 移向下一个 void PRINTF(LinkList L)/输出函数 LinkList q; q=L-next; while(q)printf(%
10、4d,q-date);q=q-next; printf(n); main() LinkList M; int n;/n 为插入数的个数printf( 请输入插入数的个数n); scanf(%d,&n); printf( 请输入这 %d个数 n,n); CreatList( &M,n); printf( 该线性表顺序输出为n); PRINTF(M); 实验 4 约瑟夫环算法/* 约瑟夫环问题是一个数学的应用问题:已知n 个人(以编号1,2,3n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到m 的那个人出列;他的下一个人又从1 开始报数,数到m 的那个人又出列;依此规律重复下去,
11、直到圆桌周围的人全部出列。*/ #include #include typedef struct Node int date; struct Node *next; LinkList; LinkList *CreatList(int n)/ 创建 n 个数的循环链表 int i=1; LinkList *p,*q,*head; p=(LinkList*)malloc(sizeof(LinkList); p-date=i; head=p; for(i=2;idate= i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
12、整理 - - - - - - - 第 5 页,共 25 页 - - - - - - - - - 数据结构实验题6 p-next=q; p=q; p-next=head; return head; void Print(LinkList *L) / 输出 n 个数 LinkList *p; p=L; printf(%d ,p-date); p=p-next; while(p!=L) printf(%d ,p-date);p=p-next; printf(n); void FreeNode(LinkList *L,int k,int m) / 输出每个第m 的数 int i,j; LinkList
13、 *p,*q; p=L; for(i=1;inext; while(p-next!=p) for(j=1;jnext; printf(%d ,p-date); q-next=p-next; p=p-next; printf(%d ,p-date); void main() LinkList *L; int n,k,m; printf( 请输入人数,从第几个人数,数到几:n k m=n); scanf(%d %d %d,&n,&k,&m); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
14、第 6 页,共 25 页 - - - - - - - - - 数据结构实验题7 L=CreatList(n); printf(n 个数分别为 ); Print(L); printf( 每次出列数为 ); FreeNode(L,k,m); printf(n); 实验 5 利用栈,判断输入的括号序列是否配对,若配对则将序列输出,否则输出ERROR 。#include #include #define STACK_INIT_SIZE 100 typedef struct SqStack char *base; / 在栈构造之前和销毁之后,base 的值为 NULL char *top; / 栈顶指针
15、int stacksize; / 当前已分配的存储空间,以元素为单元SqStack; / 建立栈void InitStack(SqStack *S) / 初始化栈 (*S).base=(char*)malloc(STACK_INIT_SIZE*sizeof(char); (*S).top=(*S).base; (*S).stacksize = STACK_INIT_SIZE; / 初始存储容量 int StackEmpty(SqStack S) / 判断栈是否为空 if(S.top=S.base) return 1;/ 栈为空的条件的栈顶=栈尾else return 0; void Push(
16、SqStack *S,char e) /插入元素 e 为第一个栈顶新的元素 *(*S).top)=e; (*S).top+; void Pop(SqStack *S,char *e) / 删除 S1的栈顶元素 ,并输出 e (*S).top-; *e=*(*S).top); main() int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 25 页 - - - - - - - - - 数据结构实验题8 char a,e; /a 为输入元素SqStack p; I
17、nitStack(&p); / 初始化栈 p printf( 请输入需要判断的括号n); a=getchar(); / 输入 a while(a!=n) /printf(+%cn,a); if(a=(|a=|a=) Push(&p,a); else if(a=)|a=|a=) Pop(&p,&e); i=0; /printf(*%cn,e); switch(e) case (: if(a=) i=1; break; case : if(a=) i=1; break; case : if(a=) i=1; break;/*default不能用来判断字符*/ /printf($%dn,i); if
18、(i=0)break; a=getchar(); if(!StackEmpty(p) printf( 括号不匹配 n); / 栈不为空else if(StackEmpty(p) printf( 括号匹配 n); / 栈为空 实验 6 利用循环队列模拟舞伴配对问题:在舞会上,男女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对的者等待下一轮舞曲,舞曲结束后,按照先配对的先分开进入各自的队列。假设初始男女人数及舞会的轮数由参数给出,模拟上述舞伴配对问题。输出第 n 个舞曲男女配对的序列。#include #include #includ
19、e #define SIZE 100 / 最大队列长度typedef struct NameQueue char BoyName10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 25 页 - - - - - - - - - 数据结构实验题9 char GirlName10; NameQueue; / 定义名字结构体typedef struct SqQueue NameQueue *base; / 初始化动态分配空间int front; int rear; SqQue
20、ue; / 定义循环队列void InitQueue(SqQueue *Q) / 构造一个空队列 Q-base=(NameQueue *)malloc(SIZE*sizeof(NameQueue); Q-front=Q-rear=0; int QueueEmpty(SqQueue Q) / 判断队列是否为空 if (Q.rear=Q.front) return 1; else return 0; void EnQueue(SqQueue *Q,NameQueue e) / 插入元素 e 为 Q 的新的队尾元素 if (Q-rear+1)%SIZE=Q-front) / 队满exit(0); e
21、lse Q-baseQ-rear=e; Q-rear=(Q-rear+1)%SIZE; / 入队 void DeQueue(SqQueue *Q,NameQueue *e)/ 删除 Q 的队头元素 , 并用 e 返回其值 if (Q-rear=Q-front) / 队满exit(0); else (*e)=Q-baseQ-front; Q-front=(Q-front+1)%SIZE; / 出队 void main() int i,time,BoyNum,GirlNum; /time 为舞会曲数 ,BoyNum 为男生人数, Girl 为女生人数char name10; /name 字符串数组
22、储存姓名SqQueue Boy,Girl,Dancer; / 定义 Boy,Girl,Dancer 三个队列NameQueue e1,e2; printf( 请输入舞会曲数,男生人数 ,女生人数 n); scanf(%d %d %d,&time,&BoyNum,&GirlNum); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 25 页 - - - - - - - - - 数据结构实验题10 InitQueue(&Boy); InitQueue(&Girl); Init
23、Queue(&Dancer); getchar(); printf( 输入男生姓名 n); for(i=1;i=BoyNum;i+) gets(e1.BoyName); / 输入男生姓名strcpy(e1.GirlName, ); EnQueue(&Boy,e1); printf( 输入女生姓名 n); for(i=1;i=GirlNum;i+) gets(e1.GirlName); / 输入女生姓名strcpy(e1.BoyName, ); EnQueue(&Girl,e1); printf(*舞会配对顺序 *n); for(i=1;i=time;i+) printf( 第%d 配对结果为
24、n,i); while(!QueueEmpty(Boy)&!QueueEmpty(Girl) DeQueue(&Boy,&e1); strcpy(name,e1.BoyName); / 用 name 字符串存储男生姓名DeQueue(&Girl,&e1); strcpy(e1.BoyName,name); / 此时 e1 里存有男生和女生姓名EnQueue(&Dancer,e1); printf( %s-%s ,e1.BoyName,e1.GirlName); while(!QueueEmpty(Dancer) / 当舞会配对完成输出舞会队列里的男女姓名 DeQueue(&Dancer,&e1
25、); strcpy(e2.BoyName,e1.BoyName); strcpy(e2.GirlName, ); EnQueue(&Boy,e2); strcpy(e1.BoyName, ); EnQueue(&Girl,e1); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 25 页 - - - - - - - - - 数据结构实验题11 实验 7 已知一个 MN 的稀疏矩阵A,用三元组的方法压缩存储该矩阵,输出该三元组及矩阵转置后的三元组。(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构实定义 2022 数据结构 定义
限制150内