スタック
#! /usr/local/bin/python# -*- coding:utf-8 -*-class stack:def __init__(self,data=[]):self.data=datadef stack_empty(self):if len(self.data)==0:return Trueelse:return Falsedef push(self,x):self.data.append(x)def pop(self):if self.stack_empty():print 'stack is empty'else:num=len(self.data)-1result=self.data[num]self.data=self.data[0:num]return result
キュー
#! /usr/local/bin/python# -*- coding:utf-8 -*-class queue():def __init__(self,data=[]):self.data=datadef queue_empty(self):if len(self.data)==0:return Trueelse:return Falsedef enqueue(self,x):self.data.append(x)def dequeue(self):if self.queue_empty():print 'queue is empty'else:result=self.data[0]self.data=self.data[1:]return result
連結リスト
#! /usr/local/bin/python# -*- coding:utf-8 -*-class Linkedlist:class cell:def __init__(self,key,id,prev=None,next=None):self.id=idself.key=keyself.prev=prevself.next=nextdef __init__(self,A=[]):self.count=1 # var for making cell_id uniqueself.obj=[]self.obj.append(self.cell(key='head',id=0,next=None))for i in range(len(A)):self.insert(A[i],self.count-1,None)def list_search(self,x):i=0while True:next=self.obj[i].nextif next==None:breakobj=self.obj[next]if obj.key==x:return obji+=1return Nonedef insert(self,key,prev,next):self.obj.append(self.cell(key,self.count,prev,next))self.obj[prev].next=self.countif next!=None:self.obj[next].prev=self.countself.count+=1def delete(self,key):if self.list_search(key)==None:print 'input_value doesn\'t exist in list'else:#search delete objobj=self.list_search(key)self.obj[obj.prev].next=obj.nextif obj.next!=None:self.obj[obj.next].prev=obj.prevself.obj[obj.id].prev=Noneself.obj[obj.id].next=None
連結リストはポインタじゃなくてオブジェクトのプロパティにidをもたせてそこをポインタっぽくすることで実装しました(こんなんでいいんでしょうかね^^;
0 件のコメント:
コメントを投稿