JAVA模擬新增順序表及單鏈表_java

來源:腳本之家  責任編輯:小易  

肯定是要分配空間的,你第一個程序的initsqlist函數中聲明的結構體指針(Sqlist*a;而第二個程序的initsqlist函數中是聲明的結構體(Sqlist a;前者只是在計算機內存中聲明一個指針,而不會給這個指針分配內存空間,所以你初始化的時候要給這個指針用malloc函數分配空間,而后者是實實在在的定義了一個結構體,在內存在不僅僅是一個地址,還分配了空間,就像你定義了一個數組一樣,已經在內存存在空間了,不需要再分配了?傮w來說就是你定義的是指針的話就要分配空間。你的2個程序都是對的,但是一般用第一種定義鏈表!www.anxorj.tw防采集請勿采集本網。

最近在回顧大學學的數據結構,這里給大家用java模擬順序表和單鏈表的新增

當順序表中所有存儲單元已經被使用,在下次插入元素之前,需要新增存儲單元。這點是數組所不具有的特性。注:定義一個存儲單元類型SeqType是為了使順序表適和更多數據類型,使用的時候修改SeqType類型即可

1順序表新增

陸小鳳傳奇總共有211310部,排列順序5261如下: 1、第一部《陸小鳳4102傳奇之陸小鳳前1653傳》。2、第二部《陸小鳳傳奇之鐵鞋大盜》。3、第三部《陸小鳳傳奇之大金鵬王》。4、第四部《陸小鳳傳奇

/** * 順序表 * * @author cjd * */public class ArrayList { private Object[] elementData; // 底層是一個數組,目前還沒有確定長度 private int size; // 不是數組分配了幾個空間,而是元素的個數 public ArrayList() { this(4); } public ArrayList(int initialCapacity) { elementData = new Object[initialCapacity]; } // 返回線性表的大小,即數據元素的個數。 public int size() { return size; } // 返回線性表中序號為 i 的數據元素@Override public Object get(int i) { return elementData[i]; } // 將數據元素 e 插入到線性表中 i 號位置 public void add(int i, Object e) { // 擴容 elementData = Arrays.copyOf(elementData, elementData.length*2); if (size == elementData.length) {//數組滿了,就擴容 Object[] elementDatanew = new Object[elementData.length * 2];//新創建一個新的數組,長度是舊數組2倍 for (int j = 0; j < elementData.length; j++) { elementDatanew[j] = elementData[j];//將舊數組的數據拷貝到新數組 } elementData = elementDatanew;//讓elementData指向新數組 } //最后位后移 for(int j=size;j>i;j--){ elementData[j]=elementData[j-1]; } // 給數組賦值 elementData[i] = e; // 元素個數+1 size++; } // 將數據元素 e 插入到線性表末尾 public void add(Object e) { this.add(size,e);//最后位新增 } public String toString() { if (size == 0) { return "[]"; } StringBuilder stringBuilder = new StringBuilder("["); for (int i = 0; i < size; i++) { if (i == 0) stringBuilder.append("" + elementData[i]); else stringBuilder.append("," + elementData[i]); } stringBuilder.append("]"); return stringBuilder.toString(); }}

鏈表優點和5261缺點如下: 優點:在插入和刪除操作時,4102只需要修改被刪節點1653上一節點的鏈接地址,不需要移動元素,從而改進了在順序存儲結構中的插入和刪除操作需要移動大量元素的缺點。

測試mian

public class test { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(3,9); System.out.println("實現順序表新增"+list.toString()); }}

2單鏈表新增

實體類

public class Node { Object data;//要存儲的數據 Node next; public Node(Object data, Node next) { super(); this.data = data; } public Node() { super(); } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; }}

方法

/** * 單鏈表表 * * @author cjd * */ public class SingleLinkedList { private Node head = new Node();//頭結點,不存儲數據,為了編程方便 private int size;//一共有幾個結點 // 表的大小,即數據元素的個數。 public int size() { return size; } // 返回單鏈表中序號為 i 的數據元素 public Object get(int i) { //遍歷結點 Node p=head;//找到前一個結點,從head結點開始 for(int j=0;j<i;j++){ p=p.next; } return p.data; } // 將數據元素 e 插入到單鏈表中 i 號位置 public void add(int i, Object e) { //遍歷結點 Node p=head;//找到前一個結點,從head結點開始 for(int j=0;j<i;j++){ p=p.next;//移動指針到下一個結點 } //新創建一個結點 Node newNode = new Node(); newNode.data=e; newNode.next=p.next; p.next=newNode;//指明新結點的直接后繼結點 // 個數+1 size++; } // 將數據元素 e 插入到單鏈表末尾 public void add(Object e) { this.add(size,e);//最后位新增 } public String toString() { if (size == 0) { return "[]"; } Node p=head.next;//找到前一個結點,從head結點開始 StringBuilder stringBuilder= new StringBuilder("["); for (int i = 0; i < size; i++) { if (i == 0) stringBuilder.append("" + p.data); else stringBuilder.append("," + p.data); //移動指針到下一個結點 p=p.next; } stringBuilder.append("]"); return stringBuilder.toString(); } }

測試類

public class test { public static void main(String[] args) { SingleLinkedList singlist=new SingleLinkedList(); singlist.add(1); singlist.add(2); singlist.add(3); singlist.add(4); singlist.add(5); singlist.add(6); singlist.add(3,9); System.out.println("實現單鏈表新增"+singlist.toString()); }}

#includeincludedefine N 2000define INCRE 20typedef struct{int*elem;存儲空間基址int length;順序表當前長度int listsize;順序表當前分配空間}SqList;int Init_Sq(SqList&L)/順序表初始化{int i,n;L.elem=(int*)malloc(N*sizeof(int));分配存儲空間if!L.elem)return 0;分配失敗L.length=0;初始長度L.listsize=N;初始分配空間scanf("%d",&n);for(i=0;i;i+)scanf("%d",&L.elem[i]);L.length=n;return 1;}void Destroy_Sq(SqList&L)/順序表銷毀{if(L.elem)free(L.elem);}int Insert_Sq(SqList&L,int i,int e)/順序表插入,在第i個位置上插入e值{int*p;int*base;if(i|i>L.length+1)/判斷插入位置return 0;if(L.length>=L.listsize)/插入位置在順序表尾{base=(int*)realloc(L.elem,(L.listsize+INCRE)*sizeof(int));新增一個結點if!base)return 0;L.elem=base;L.listsize+INCRE;}int*q=(L.elem[i-1]);q為插入位置for(p=(L.elem[L.length-1]);p>=q;p)(p+1)=*p;后面的元素從后向前依次后移q=e;L.length;return 1;}void Print_Sq(SqList L)/順序表輸出{int i;for(i=0;i;i+)printf("%d",L.elem[i]);printf("\\n");}void main(){SqList L;Init_Sq(L);int x,n;scanf("%d%d",&x,&n);Insert_Sq(L,n,x);Print_Sq(L);Destroy_Sq(L);}內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • java數據結構實現順序表示例
  • java實現單鏈表翻轉實例代碼
  • java單鏈表的實現代碼
  • java單鏈表基本操作的實現
  • java模擬單鏈表和雙端鏈表數據結構的實例講解
  • java實現單鏈表之逆序
  • java實現數據結構單鏈表示例(java單鏈表)
  • java實現單鏈表中是否有環的方法詳解
  • 深入理解java高級特性——注解
  • 使用java代碼獲取服務器性能信息及局域網內主機名
  • mybatis報錯元素內容必須由格式正確的字符數據或標記組成異常的解
  • java構造方法實例詳解(動力節點java學院整理)
  • 詳解java動態代理的2種實現方式
  • java+opencv3.2.0實現hough直線檢測
  • 如何優雅的處理spring boot異常信息詳解
  • hibernate迫切連接和普通連接的區別實例詳解
  • java版c語言版簡單使用靜態語言實現動態數組的方法
  • java實現注冊郵箱激活賬戶實例代碼
  • 關于數據結構順序表的問題
  • C語言(數據結構)順序表的初始化
  • 利用動態分配順序表實現插入和刪除,用程序加以實現,代碼如下
  • 最近在學數據結構中的順序線性表,完全聽不懂
  • C語言(數據結構)順序表的初始化需要申請結點空間嗎?
  • 陸小鳳傳奇的排列順序
  • 鏈表存儲的優缺點
  • 數據結構的順序表i和j代表什么意思?
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全c#教程vbvb.netc 語言java編程delphijavaandroidiosswiftscala易語言匯編語言其它相關首頁java數據結構實現順序表示例java實現單鏈表翻轉實例代碼java單鏈表的實現代碼java單鏈表基本操作的實現java模擬單鏈表和雙端鏈表數據結構的實例講解java實現單鏈表之逆序java實現數據結構單鏈表示例(java單鏈表)java實現單鏈表中是否有環的方法詳解深入理解java高級特性——注解使用java代碼獲取服務器性能信息及局域網內主機名mybatis報錯元素內容必須由格式正確的字符數據或標記組成異常的解java構造方法實例詳解(動力節點java學院整理)詳解java動態代理的2種實現方式java+opencv3.2.0實現hough直線檢測如何優雅的處理spring boot異常信息詳解hibernate迫切連接和普通連接的區別實例詳解java版c語言版簡單使用靜態語言實現動態數組的方法java實現注冊郵箱激活賬戶實例代碼java使double保留兩位小數的多方java8 十大新特性詳解java.net.socketexception: connjava寫入文件的幾種方法分享java環境變量的設置方法(圖文教程java 十六進制與字符串的轉換java list用法示例詳解java中file類的使用方法javaweb實現文件上傳下載功能實例java 字符串截取的三種方法(推薦spring+mybatis實現數據讀寫分離的實例代簡單介紹區分applet和application的方法java swing jtogglebutton開關按鈕的實現java實現兩人五子棋游戲(三) 畫出棋子java的wait(), notify()和notifyall()使用使用spring data jpa的坑點記錄總結淺談java線程join方法使用方法json字符串與object、list、map的互轉工具swing圖形界面實現可動態刷新的驗證碼java 二維數組矩陣乘法的實現方法
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载