线性结构-相关算法

<big>编译环境:python v3.5.0, mac osx 10.11.4</big>

多项式加法与乘法运算(队列)

主要思路:

  • 对于多项式的加法:相同指数项的系数相加,其他部分进行拷贝,如下图所示:
  • 对于多项式的乘法:选定一个多项式,将其中的元素逐个与另一多项式相乘,形成新的多项式。最后再对这些多项式进行相加。(polynomial.py
    # -
    - coding: utf-8 --
    class polyNode():
    def init(self, coef, expon, next=None): # 构建链表单元结构
    self.coef = coef
    self.expon = expon
    self.next = next
    # ---------------队列定义--------------------------------
    class queueChain:
    def init(self, front=None, rear=None):
    self.front = front # fron指向表头的指针
    self.rear = rear # rear指向表尾的指针
    def inQue(queue, newNote): # 入队操作
    if queue.front is None: # 链表为空,将front 赋值给表头
    queue.front = queue.rear = newNote
    else:
    queue.rear.next = newNote
    queue.rear = newNote
    def outQue(queue): # 出队操作
    if queue.front is None: # 如果front指向为空,则链表为空
    print('it is an empty queue!')
    else:
    p = queue.front
    if queue.front == queue.rear: # 如果前后指针指向一个元素,则全部重置为None
    queue.front = queue.rear = None
    else:
    queue.front = p.next
    return p
    # -------------------------加法定义-------------------
    def polyAdd(ps1, ps2):
    storePoly = queueChain() # 构建存放结果的队列
    p1 = ps1.front # 构建 p1,p2分别指向存放元素的表头
    p2 = ps2.front
    while p1 is not None and p2 is not None:
    compare = p1.expon - p2.expon # 对比两者指数的大小
    if compare > 0: # 如果p1的指数大
    inQue(storePoly, p1)
    p1 = p1.next # 将指针指向p1下一个元素
    elif compare < 0: # 如果p2的指数大
    inQue(storePoly, p2)
    p2 = p2.next # 将指针指向p2下一个元素
    else:
    if p1.coef + p2.coef: #没有抵消则入队
    newNote = polyNode(p1.coef + p2.coef, p1.expon) # 如果相等则同时出队,并系数相加后进入结果链
    inQue(storePoly, newNote)
    p1 = p1.next
    p2 = p2.next
    while p1 is not None:
    inQue(storePoly, p1)
    p1 = p1.next
    while p2 is not None:
    inQue(storePoly, p2)
    p2 = p2.next
    return storePoly
    # -------------------------乘法法定义-------------------
    def polyMultiple(ps1,ps2):
    storePoly = queueChain()
    p1 = ps1.front # 构建 p1,p2分别指向存放元素的表头
    p2 = ps2.front
    while p1 is not None: # 将p1中的元素逐个弹出
    tag = p2 # tag 指向p2的头指针,用于循环相乘
    newP2 = queueChain() # 存放一次相乘结果的队列
    while tag is not None: # 将爬p1弹出的元素逐个与p2中的元素相乘
    if p1.coef
    tag.coef:
    inQue(newP2,polyNode(coef=p1.coef*tag.coef,expon=p1.expon+tag.expon))
    tag =tag.next
    p1 = p1.next
    storePoly = polyAdd(newP2,storePoly)
    return storePoly

单向链表反转(单向链表)

给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。
输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 10^5)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。
输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。
输入样例:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

主要思路:reverse_linkedList.py

  • 首先要对输入数据进行预处理,即按地址连接,形成单向链表。(要考虑到多余节点的情况,所以链接到head=‘-1’时就终止)


  • 在反转链表时,可以逐个反转,再将未反转的序列加入到链表中


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容