【MOOC-浙大数据结构】第二周的编程作业——线性结构

2024-03-29 12:58

本文主要是介绍【MOOC-浙大数据结构】第二周的编程作业——线性结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二周的编程作业:

1.两个有序链表序列的合并

List Merge( List L1, List L2 )
{List Res,tmp,pa,pb;	Res=(List)malloc(sizeof(struct Node));pa=L1->Next;pb=L2->Next;tmp=Res;while(pa&&pb){if(pa->Data<=pb->Data){tmp->Next=pa;tmp=pa;pa=pa->Next;}else{tmp->Next=pb;tmp=pb;pb=pb->Next;}}tmp->Next=pa?pa:pb;L1->Next=NULL;L2->Next=NULL;return Res;
}

2.一元多项式的乘法与加法运算

//写了好久

//来自退休老阿姨的挣扎

#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *PolyNomial;
struct PolyNode{int coef;int expon;PolyNomial link;
};void Attach(int c,int e,PolyNomial *pRear)
{PolyNomial P=(PolyNomial)malloc(sizeof(struct PolyNode));P->coef=c;P->expon=e;P->link=NULL;(*pRear)->link=P;*pRear=P;
} 
PolyNomial ReadPoly()
{PolyNomial P,Rear,t;P=(PolyNomial)malloc(sizeof(struct PolyNode));P->link=NULL;Rear=P;int n,c,e;scanf("%d",&n);while(n--){scanf("%d%d",&c,&e);Attach(c,e,&Rear);}t=P;P=P->link;free(t);//不要头结点 return P;
}
PolyNomial Mult(PolyNomial P1,PolyNomial P2)
{if(!P1||!P2)return NULL;	//测试点4-判断两个多项式都不为零多项式PolyNomial P,Rear,t1,t2,t;P=(PolyNomial)malloc(sizeof(struct PolyNode));P->link=NULL;Rear=P;t1=P1;t2=P2;while(t2){Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);t2=t2->link;}t1=t1->link;while(t1){t2=P2;Rear=P;while(t2){int c=t1->coef*t2->coef;int e=t1->expon+t2->expon;while(Rear->link&&Rear->link->expon > e){Rear=Rear->link;}if(Rear->link&&Rear->link->expon==e){if(Rear->link->coef+c!=0)	{Rear->link->coef+=c;}else{							Rear->link->coef=0;Rear->link->expon=0;}}else{t=(PolyNomial)malloc(sizeof(PolyNode));t->coef=c;t->expon=e;t->link=Rear->link;Rear->link=t;Rear=Rear->link;}			t2=t2->link;}		t1=t1->link;}Rear=P;P=P->link;free(Rear);return P;
}
PolyNomial Add(PolyNomial P1,PolyNomial P2)
{PolyNomial P,Rear,t1,t2;P=(PolyNomial)malloc(sizeof(struct PolyNode));P->link=NULL;Rear=P;t1=P1;t2=P2;while(t1&&t2){if(t1->expon==t2->expon){if((t1->coef+t2->coef)==0){t1=t1->link;t2=t2->link;}else{Attach(t1->coef+t2->coef,t1->expon,&Rear);t1=t1->link;t2=t2->link;}} else if(t1->expon > t2->expon){Attach(t1->coef,t1->expon,&Rear);t1=t1->link;}else if(t1->expon < t2->expon){Attach(t2->coef,t2->expon,&Rear);t2=t2->link;}}while(t1){Attach(t1->coef,t1->expon,&Rear);t1=t1->link;}while(t2){Attach(t2->coef,t2->expon,&Rear);t2=t2->link;}Rear=P;P=P->link;free(Rear);return P;
}
void PrintPoly(PolyNomial P)
{if(!P)printf("0 0\n");else{while(P){printf("%d %d",P->coef,P->expon);P=P->link;if(P)		printf(" ");}printf("\n");}
}
int main()
{PolyNomial P1,P2,PP,PS;P1=ReadPoly();P2=ReadPoly();	PP=Mult(P1,P2);PrintPoly(PP);PS=Add(P1,P2);PrintPoly(PS);
}

3.Reversing Linked List 

//一开始读错题了,以为只要反转K个就好了,没想到是每K个都要翻转5555

//数据点5超时卡了半个小时,心累

然后改成了while就过了,然后再用for交居然也过了,我????

#include<stdio.h>
#include<map>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string s[100005];
int main()
{int n,k,i,j,x,l;string bg,a,b;map<string,int> data;//存data map<string,string> next;//模拟指针 cin>>bg>>n>>k;for(i=0;i<n;i++){cin>>a>>x>>b;data[a]=x;next[a]=b;} l=0;string c=bg;while(1){if(c=="-1")break;s[l++]=c;c=next[c];}for(i=0;i+k<=l;i+=k)reverse(s+i,s+i+k);for(i=0;i<l-1;i++)cout<<s[i]<<" "<<data[s[i]]<<" "<<s[i+1]<<endl;cout<<s[l-1]<<" "<<data[s[l-1]]<<" -1"<<endl;
}

4.Pop Sequence

#include<stdio.h>
#include<stack>
#include<iostream>
using namespace std;
int a[1005];
int main()
{int m,n,l,i,j,k;scanf("%d%d%d",&m,&l,&n);while(n--){		for(i=0;i<l;i++)scanf("%d",&a[i]);stack<int> s;int rs=1;//放入的数字 k=0;//flagfor(i=1;i<=a[0];i++)s.push(rs++);if(s.size()>m)k=1;//爆栈s.pop();for(i=1;i<l;i++){if(!s.empty()){if(a[i]==s.top()){s.pop();}else{for(;rs<=a[i];)s.push(rs++);if(s.size()>m)k=1;//爆栈 if(a[i]==s.top())s.pop();}	}			else{for(;rs<=a[i];)s.push(rs++);			if(s.size()>m)k=1;//爆栈 s.pop();}			}if(!s.empty()||rs!=l+1)//栈不空or数字没有放完 k=1;if(k)printf("NO\n");else printf("YES\n");}
}

 

这篇关于【MOOC-浙大数据结构】第二周的编程作业——线性结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/858652

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要