1. 程式人生 > >【Python】連結串列、佇列、棧

【Python】連結串列、佇列、棧

class Node(object): # Node類有value和next兩個屬性 def __init__(self,value,next=None): self.value=value # 存放資料元素 self.next=next # next是下一個節點的標識 def create_list(n): # 建立單鏈表 if n<=0: return False if n==1: return Node(1) else: root=Node(1) tmp=root for i in range(2, n+1): tmp.next=Node(i) tmp=tmp.next return root def print_list(head): # 列印單鏈表 p=head while p!=None: print(p.value) p=p.next def len_list(head): # 連結串列長度 c=0 p=head while p!=None: c=c+1 p=p.next return c def del_list(head,n): # 刪除連結串列 if n<1 or n>len_list(head): return head elif n is 1: ''' Python中的物件包含三要素:id、type、value 其中id用來唯一標識一個物件,type標識物件的型別,value是物件的值 is判斷的是a物件是否就是b物件,是通過id來判斷的 ==判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的 ''' head=head.next # head指向P1,刪除index=1以後,head指向P2; else: p=head for i in range(1,n-1): p=p.next q=p.next # n=4時,p.next指向4 p.next=q.next # q.next指向5,並放在3後面 return head def insert_list(head,n): # 插入 if n<1 or n>len_list(head): return p=head for i in range(1,n-1): p=p.next t=Node(5) #設定插入的值 t.next=p.next p.next=t return head def sort_list(head): if head is None: return right=head.next # left的值大於right,值互換 while right is not None: left=head right_val=right.value while left is not right: if left.value<=right_val: pass else: left.value,right_val=right_val,left.value left=left.next right.value=right_val right=right.next def reverse_list(head): # 逆置 p1=None p2=head while(p2 is not None): tmp=p2.next p2.next=p1 p1=p2 p2=tmp return p1 if __name__=='__main__': n=8 head=create_list(n) print_list(head) print("___________________________") print("刪除後的list:") n1=4 del_list(head,n1) print_list(head) print("___________________________") print("插入後的list:") n = 8 head = create_list(n) n2=4 insert_list(head,n2) print_list(head) print("___________________________") print("排序後的list:") sort_list(head) print_list(head)

相關推薦

Python連結串列佇列

class Node(object): # Node類有value和next兩個屬性 def __init__(self,value,next=None): self.value=value # 存放資料元素 self.next=next

Python學習筆記4-timemd5加密base64模塊

數據庫 sta 自己的 pri 時間 decode 不可 字符 ftime 1、time # 1、格式化好的時間 2018-1-14 16:42# 2、時間戳 是從unix元年到現在所有的秒數# 3、時間元組# 想時間戳和格式化好的時間互相轉換的話,都要先轉成時間元組,然後

Python學習筆記4-ossys模塊

etc 創建 記錄 body spa platform pri eas usr 1、os操作系統模塊 1 import os 2 print(os.getcwd()) #獲取當前工作目錄 3 # print(os.chdir("..")) #更改當前目錄.當前目錄

Pythonmatplotlib畫圖設定顏色標記和線型(系列2)

摘要 上一節講了如何設定標題、軸標籤、刻度、刻度標籤。 本節講解設定顏色、標記和線型。 1.畫基礎圖 import matplotlib.pyplot as plt from numpy.random import randn plt.plot(randn(30).cumsum(

Pythonmatplotlib畫圖設定標題軸標籤刻度刻度標籤(系列1)

摘要 資訊視覺化(也叫繪圖)是資料分析中最重要的工作之一。它可能是探索過程的一部分,例如,幫助我們找出異常值、必要的資料轉換、得出有關模型的idea等。另外,做一個可互動的資料視覺化也許是工作的最終目標。Python有許多庫進行靜態或動態的資料視覺化,但我這裡重要關注於matplotli

python如何使用pip安裝解除安裝包

1、在安裝python的時候要把pip勾選上(預設安裝方式已經為你勾選好了)。這樣你就已經安裝了pip。 2、開啟命令提示符視窗 開始→所有程式→附件→執行(快捷鍵 Win+R),在對話方塊中輸入cmd,回車確認即可 3.安裝想要的包。具體名稱可以上PyPI或輸入pip

Pythonudp網路程式-傳送接受資料

udp網路程式-傳送、接收資料 1. udp網路程式-傳送資料 建立一個基於udp的網路程式流程很簡單,具體步驟如下: 建立客戶端套接字傳送/接收資料關閉套接字與發簡訊類似。 程式碼如下: #coding=utf-8 from socket import * # 1.

基於連結串列佇列基於順序表的佇列 C語言

基於連結串列的佇列: //LinkQueue.h #pragma once #include<stdio.h> #include<stdlib.h> #include<

基於Python單向連結串列實現尾部任意位置新增,刪除

# coding = utf-8 # 建立節點類 class Node(object):     def __init__(self, data):         # 定義指向域         self.next = None         # 定義資料域      

Python讀取命令列引數在PyDev中設定Python執行時的引數

有時候,我們寫的命令列程式需要批次執行,這裡可以讓Python程式讀取命令列引數,再編寫一個命令列批次執行指令碼.bat,實際上就是一個充滿命令的、改了字尾名的文字檔案,在多個測試用例扔進Python程式中是非常有用的。 例如,如下圖,有一個cmdArgs.py程式,當在p

Python關於鍵盤鍵入值str的與或非問題?報錯:TypeError: unsupported operand type(s) for |: 'str' and 'str'

error 運算符 字符 符號 str == 條件 col one 參考 【報錯:TypeError: unsupported operand type(s) for |: ‘str‘ and ‘str‘】   在進行鍵入值比較的時候,想要用“或&rd

LeetCode連結串列 linked list(共34題)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } 【2】Add Two Numbers    【19】Remove Nth Node From End of List (2018年10月30日

C++連結串列的實現

1.定義 //單向 struct Node{ int value; Node * next; }; //雙向 struct DNode{ int value; DNode * left; DNode * right; }; 2.

Java連結串列中儲存物件的問題

  在刷《劍指OFFER》的時候,自己犯了一個錯誤,發現:在連結串列中儲存一個物件時,如果該物件是不斷變化的,則應該建立一個新的物件複製該物件的內容(而不是指向同一個物件),將這個新的物件儲存到連結串列中。如果直接儲存該物件的話,連結串列中的物件也會不斷變化。基本資料型別和String則沒有這種問題。 其實

python詳解queue佇列

一、佇列的定義 佇列類似於一條管道,元素先進先出,進put(arg),取get( )。需要注意的是:佇列都是在記憶體中操作,程序退出,佇列清空,另外,佇列也是一個阻塞的形態。 二、佇列分類 佇列有很多種,但都依賴模組queue 佇列方式

模板連結串列的兩種實現形式

摘自李煜東《演算法競賽進階指南》 //連結串列模板1 struct Node{ int value;//資料 Node *prev,*next;//指標 }; Node *head,*tail; void initialize()//建

java——連結串列與陣列的區別

連結串列 陣列 記憶體佔用 不需要連續的記憶體空間 需要連續的記憶體空間 大小可變 連結串列的大小可動態變化 陣列大小固定,不能動態擴充套件 增刪 較快,只需要修改前一個元素的指標即可 較慢,需要移動修改元素只有的

面試題連結串列佇列

1.順序儲存結構 順序儲存結構,即陣列。優點:節省儲存空間,隨機存取表中元素;缺點 :插入和刪除操作需要移動元素 順序儲存結構的插入與刪除操作程式碼實現 public void insert(int data){ if (le

python資料結構與演算法連結串列——連結串列中環的入口節點兩個連結串列的第一個公共節點(相交連結串列

如題,這類問題在LeetCode上和劍指offer上總共有這些涉及: LeetCode:141,142,160 劍指offer:兩個連結串列的第一個公共節點(預設是無環單鏈表)、連結串列中環的入口節點 補充:兩個未知是否有環的單鏈表第一個公共節點 我直接敘述第三個問題,

資料結構陣列連結串列佇列二叉樹

陣列 陣列儲存的資料在地址空間上是連續的。 方便資料的查詢,查詢資料的時間複雜度為O(1)。 連結串列 連結串列儲存的資料在地址空間上可連續,可不連續。 連結串列中的每一個節點都