導航:首頁 > 編程語言 > python3中如何新建鏈表

python3中如何新建鏈表

發布時間:2022-04-18 23:13:33

python可以編寫自己的鏈表類嗎

你如果一定要模擬C建立樹形結構的方式,可以不必特意制定left和right的類型,僅在需要的時候給其賦上LinkedList的類型就行了。
如:
>>> class LinkedList():
def __init__(self,default_value=""):
self.left=0 #比如0表示left節點為空
self.right=0

self.value=default_value
return

>>> root = LinkedList()
>>> left = LinkedList()
>>> right = LinkedList()
>>> root.left = left
>>> root.right = right
>>> root.left
<__main__.LinkedList object at 0x00F964B0>

你自己寫的那個class有不少錯誤,比如value,left,right這樣寫,屬於類值,類似C++中的靜態值,是所有LinkedList類和類實例共享的,你的__init__缺少self。

Ⅱ python中如何創建類似這樣的列表,如[[1,1,1],[1,1,2],[1,1,3],[1,2,1],[1,2,2][1,2,3]……[3,3,3]]

用自帶的proct給你做個生成器:

from itertools import proct
for e in proct(range(1, 4), repeat=3): print(e)

Ⅲ Java,Python中沒有指針,怎麼實現鏈表,圖等數據結構

編程實現圖的存儲一般有常見的有兩種方式,第一種是鄰接鏈表、第二種就是鄰接矩陣。

Ⅳ 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怎樣創建具有一定長度和初始值的列表

1、首先,我們需要打開Python的shell工具,在shell當中新建一個對象member,對member進行賦值。

Ⅵ python有鏈表嗎

python中的鏈表(linked list)是一組數據項的集合,其中每個數據項都是一個節點的一部分,每個節點還包含指向下一個節點的鏈接。鏈表有兩種類型:單鏈表和雙鏈表。
鏈表的數據結構
在鏈表中刪除操作可以通過修改指針來實現,
插入則是調整,插入點的前後兩個指針的指向關系,
在python中每個變數都是指針,例如:

用內置數據結構(list,dict,tuple等)的嵌套/組合,它們隱式地包含了指向/嵌套關系,如graph[u][v]={w0,w1..}類的成員變數、嵌套類可能包含了指向/嵌套關系;
引用表示指向關系,只不過引用不能像指針一樣運算,比如p+1指向下一個元素,所以可能限制頗多。因此,要實現鏈表的操作,不能和c一樣直接對指針進行操作。
python學習網,大量的免費python視頻教程,歡迎在線學習!

Ⅶ 如何使用python建立鏈表

classListNode:
def__init__(self,x):
self.val=x
self.next=None


l1=newListNode(0)
l1.next=newListNode(1)

Ⅷ 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這個語言使用鏈表有些畫蛇添足,但是如果拿來當作需求練手也無妨。

望採納,謝謝!

Ⅸ 請問Python3中創建列表有哪些方法

Python中的列表內建了許多方法。在下文中,使用「L」代表一個列表,使用「x」代表方法的參數,以便說明列表的使用方法。

1 append()方法

列表的append()方法用於將一個項添加到列表的末尾,L.append(x)等價於L[len(L):] = [x]。

例如,使用append()方法分別將'cow'和'elephant'添加到animals列表的末尾:

關於深度學習的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。

Ⅹ 如何創建單鏈表

這我原來寫的,有單鏈表的建立、插入、刪除、查找等,希望對你有幫助
typedef struct node{
int data;
struct node *next;
}node;

node *create()
{
node *head,*p,*q;
int i=0;
int x;

head=(node *)malloc(sizeof(node));
while(1)
{
printf("please input the node:");
scanf("%d",&x);
if(x==0) {break;}
p=(node *)malloc(sizeof(node));
p->data=x;
if(++i==1)
{
head->next=p;
}
else
{
q->next=p;
}
q=p;
}
q->next=NULL;
return head;
}

void print(node *head)
{
node *p;
int index=0;
if(head->next==NULL)
{
printf("Link is empty!\n");
exit(0);
}
p=head->next;
while(p!=NULL)
{
printf("the %d node is %d\n",++index,p->data);
p=p->next;
}
}

int length(node *head)
{
int len=0;
node *p;
p=head->next;
while(p)
{
len++;
p=p->next;
}
return len;
}

node *search(node *head,int pos)
{
node *p;
int len=length(head);

p=head->next;
if(pos<0)
{
printf("incorrect position!\n");
return NULL;
}
else if(pos>len)
{
printf("incorrect position!\n");
return NULL;
}
else if(pos==0)
{
return head;
}

if(p==NULL)
{
printf("the link is empty!\n");
return NULL;
}
while (--pos)
{
p=p->next;
}
return p;
}

node *delete(node *head,int pos)
{
node *p,*q;
int len=length(head);

p=head->next;
if(pos<0)
{
printf("incorrect position!\n");
return NULL;
}
else if(pos>len)
{
printf("incorrect position!\n");
return NULL;
}
if(p==NULL)
{
printf("link empty!\n");
return NULL;
}
p=search(head,pos-1);
if(p!=NULL&&p->next!=NULL)
{
q=p->next;
p->next=q->next;
free(q);
}
return head;
}

node *insert(node *head,int pos,int x)
{
node *p,*q=NULL;
q=(node *)malloc(sizeof(node));
q->data=x;
if(pos==0)
{
head->next=q;
return head;
}
p=search(head,pos);
if(p!=NULL)
{
q->next=p->next;
p->next=q;
}
return head;
}

閱讀全文

與python3中如何新建鏈表相關的資料

熱點內容
愛旅行的預備程序員 瀏覽:111
安卓qq瀏覽器怎麼轉換到ios 瀏覽:292
不同編譯器的庫可以調用嗎 瀏覽:455
灰度信託基金加密 瀏覽:421
宿遷程序員兼職網上接單 瀏覽:924
電視編譯器怎麼設置 瀏覽:276
手機如何解壓漢字密碼的壓縮包 瀏覽:701
為什麼很多程序員愛用vim 瀏覽:828
安卓手機怎麼連接寶華韋健音響 瀏覽:555
12星座製作解壓球 瀏覽:867
java調用oracle數據 瀏覽:827
怎麼在伺服器上上傳小程序源碼 瀏覽:304
空中加油通達信指標公式源碼 瀏覽:38
分卷解壓只解壓了一部分 瀏覽:760
php網站自動登錄 瀏覽:705
合肥凌達壓縮機招聘 瀏覽:965
怎麼找到文件夾的圖標 瀏覽:237
linuxc編程pdf百度雲 瀏覽:192
會計pdf下載 瀏覽:835
c開源cf源碼 瀏覽:951