python鏈表操作
⑴ python的雙向鏈表
這里有一個:
https://github.com/rgsoda/pypy-llist/
⑵ python用單鏈表寫一個通訊錄,包括添加,刪除(可恢復),查找等基本功能
///////////list3.c實現鏈表的插入刪除查找
#include
#include
#include
typedef
struct
LNode
//////////定義數據結構體
{
int
num;
char
name[20];
struct
LNode*
next;
}*Link;
///////////定義一個指針類型
typedef
struct
{
Link
head,tail;
int
len;
}LinkList;
LinkList
*gList;
void
MenuInfo();
void
InputData(LinkList
*mList);
void
OutputData(LinkList
*mList);
void
InsertData(LinkList
*mList,int
n);
Link
SearchNode(LinkList
*mList,int
n);
void
DeleteData(LinkList
*mList,int
n);
void
main()
{
int
_choice;
int
_quit=0;
int
n=0;
gList=(LinkList
*)malloc(sizeof(LinkList));
gList->head=gList->tail=NULL;
do
{
MenuInfo();
scanf("%d",&_choice);
switch(_choice)
⑶ python鏈表__getitem__()問題
應該是誤將float當作list或者tuple來操作了
對於list或者元組,[]操作是訪問下標所在的元素,也就是__getitem__方法。
由於python定義變數的時候並不說明類型,類型都在運行時確定,因此有出現類型錯誤的可能性。
至於具體怎麼修改,無法從你的問題中得出結論,你可以看出錯的調用堆棧,都有對應的文件和行號的。
⑷ python鏈表:TypeError: add() missing 1 required positional argument: 'item'。這個錯誤怎麼改正
python 2.6用add很正常啊,add看起來沒啥問題,到是別的函數有些小問題。
1. remove前判斷下這個item是不是存在
2.if curNode is head : 應該是 if curNode is self._head
3._BagIterator(self._head) 是個什麼東西? 自己寫了一個
4. 下劃線最好不要加,除非你知道它是用來干什麼的.
5.a = linkNode() 而不是 a = linkNode
class linkNode:
def __init__(self):
self._head = None
self._size = 0
def __len__(self):
return self._size
def __contains__(self,target):
curNode = self._head
while curNode is not None and curNode.item != target:
curNode = curNode.next
return curNode is not None
def add( self, item ):
newNode = BagListNode( item )
newNode.next = self._head
self._head = newNode
self._size += 1
def remove(self, item):
preNode = None
curNode = self._head
if not item in self:
print item," is not exist."
return None
while curNode is not None and curNode.item != item:
preNode = curNode
curNode = curNode.next
self._size -= 1
if curNode is self._head :
self._head = curNode.next
else:
preNode.next = curNode.next
def __iter__(self):
curNode = self._head
while True:
yield curNode
if curNode.next is not None:
curNode = curNode.next
else:
break
class BagListNode( object ):
def __init__( self, item ):
self.item = item
self.next = None
⑸ python 單向鏈表問題
不會。
實際上,SingleLinkedList只存儲了鏈表的表頭節點的位置。
每次調用add函數,相當於新建了一個節點,
調用setNext將其下一節點指向現在鏈表的表頭,
然後將新建的節點位置作為新的表頭位置保存在鏈表裡面。
要得到鏈表的所有節點必須從表頭節點開始一個一個往下跳轉,一直跳轉到下一節點位置為None,則表示查詢完畢。
⑹ python編程中實現linkedlist(鏈表)報錯是因為什麼,怎麼解決
樓主你好!
看你的代碼存在很多問題,一個個來說明
1)首先你代碼的報錯源於你想用list來展開你的SLinkedList類,在python中,除非內置的可迭代對象外,其他都需要實現__iter__()函數,才能用list來進行展開。注意:判斷一個對象是否可迭代,請使用isinstance(obj, Iterable)來判斷obj是不是可以迭代,Iterable需要從collections中導入
2)插入的方法存在嚴重問題,按樓主的方法插入的話,因為頭節點始終在變,所以當你需要遍歷鏈表的時候就會找不到頭節點;
3)pop的方法實現也有問題,因為是單向鏈,所以無法從末節點開始刪除,只能刪除頭節點
4)top方法的意圖未知
其他:
下面列舉了一下我修改後的方案,做了一些錦上添花的操作,每個基本操作都會返回鏈表對象,這樣就可以使用鏈式操作來寫代碼;迭代函數使用yield來實現,避免展開時佔用不必要的內存。
另:我的展開時直接取鏈表中各個節點的元素,加了一些關鍵注釋在代碼中;
#-*-coding:utf-8-*-
classNode:
def__init__(self):
'''
elm:節點元素
nxt:下個節點指針
'''
self.elm,self.nxt=None,None
classSLinkedList:
def__init__(self):
'''
head:鏈表頭
end_point:鏈表尾
'''
self.head=None
self.end_point=None
defpush(self,x):
p=Node()
p.elm=x
ifself.headisNone:
self.head=p
self.end_point=p
returnself
self.end_point.nxt=p
self.end_point=p
returnself
defpop(self):
'''因為實現的是一個單鏈表,所以只能從頭開始刪除節點'''
ifself.head.nxtisNone:
return
self.head=self.head.nxt
returnself
def__iter__(self):
temp_node=self.head
whiletemp_nodeisnotNone:
yieldtemp_node.elm
temp_node=temp_node.nxt
if__name__=='__main__':
'''增加1,2,5三個元素,並刪除一個頭節點'''
mylinklist=SLinkedList().push(1).push(2).push(5).pop()
print(list(mylinklist))
其實python這個語言使用鏈表有些畫蛇添足,但是如果拿來當作需求練手也無妨。
望採納,謝謝!
⑺ 關於python鏈表的運行
看你運行幾次,我給你一條一條說
頭 1->2->3->4->5->6->7->8->9 NONE
pointer=head #這里你沒說清,我先假設這個head是鏈表的第一個,1
newnode={ } #空字典
newnode['data']=20 #添加關鍵字data=20進字典。
newnode['next']=pointer #字典的next目標指向pointer,也就是head,也就是1,但是是鏈表這個object,不是指向一個數字
head=newnode #重新定義head為newnode這個字典。head指向{『data』:20, 『next』:pointer}這個字典。
pointer=pointer['next'] #pointer指向pointer['next'],也就是pointer現在指向鏈表的第二個,2
pointer['next']=none #pointer['next']設為none,也就是現在pointer這個鏈表就被截斷了。只包含1->2->none
⑻ python中的鏈表(linked list)
鳳鸞寶帳景非常,盡是泥金巧樣妝。
曲曲遠山飛翠色,翩翩舞袖映霞裳。
梨花帶雨爭嬌艷,芍葯籠煙騁媚妝。
但得妖嬈能舉動,取回長樂侍君王。
// 這題需要使用輾轉相除法,又名歐幾里德演算法(Euclideanalgorithm)
#include <stdio.h>
int main (void)
{
int m, n, p, tmp;
printf ("Please type in two number:\n");
scanf ("%i %i", &m, &n); //輸入兩個數,分別放入m, n
p=m*n; //先把兩數的積算出來,後面m和n的值會有變
while (n!=0){
tmp=m%n;
m=n;
n=tmp; //這段是求最大公約數的演算法
}
printf ("The GCD is %i\n", m); //上面的演算法n=0時m這時的值就是最大公約數
printf ("The LCM is %i\n", p/m);//兩數的積除以最大公約數就是最小公倍數了
return 0;
}
⑼ 如何使用python建立鏈表
classListNode:
def__init__(self,x):
self.val=x
self.next=None
l1=newListNode(0)
l1.next=newListNode(1)
⑽ python中如何用鏈表實現隊列
python中的隊列是列表嗎?
如果有問題, 希望能一起研究一下?
看下網名吧, 樓主