資料結構和演算法(二)

2021-10-24 16:21:50 字數 3094 閱讀 5802

作業分析講解

********************==

1.  補充單鏈表的銷毀

釋放每個節點的堆空間

單鏈表的基本操作

***************===

初始化尾插和中間插入

列印刪除:有兩種常用的思路

思路一: 只用乙個指標搞定(刪除得不徹底)

思路二: 用兩個指標一前一後配合,搞定(推薦)

練習:1.  完善刪除的**(判斷刪除的節點不存在的情況)

2.  利用剛才講的刪除思路,實現單鏈表的銷毀

先把答案弄出來--》成就感 --》摸索優化更好的方法

單向迴圈鍊錶的基本操作

***************==

特點: 在單鏈表的基礎上首尾相接

注意: 迴圈的寫法發生改變了

while(p->next!=null) ---》變成while(p->next!=head)

作業:1. 銷毀鍊錶,從前往後寫一下

2. 利用所學的單鏈表操作,實現乙個簡單的圖書管理系統,圖書管理系統有如下功能:

書籍用結構體表示

struct  book

;1.  新增書籍

2.  刪除書籍

3.  修改書籍資訊

4.  查詢書籍資訊               

#include "myhead.h"

//封裝乙個結構體表示單鏈表

typedef struct siglist

list,*plist;

//鍊錶的初始化

plist init_list()

//插入資料(尾部插入)

int insert_tail(int newdata,plist head)

//插入資料,中間插入 把newdata插入到olddata的後面

int insert_mid(int olddata,int newdata,plist head)

//迴圈結束,並且最後乙個節點也不等於olddata,說明沒有olddata

if(p->next==null && p->data!=olddata)

//把新的節點插入到p的後面

newnode->next=p->next;

p->next=newnode;

return 0;

}//單鏈表刪除,只用乙個指標(有bug的,刪除不乾淨)

int remove_list(int deldata,plist head)

//刪除p後面的乙個節點

p->next=p->next->next; //刪除得不夠徹底

return 0;

}//用兩個指標刪除節點

int remove_list2(int deldata,plist head)

p=p->next;

q=q->next;

} //判斷最後乙個節點,剛才迴圈漏掉了

if(p->data==deldata)

//判斷deldata不存在的情況

if(flag==0)

return 0;

}//每次刪除鍊錶的最後乙個節點

int remove_tail(plist head)

//刪除節點

q->next=p->next;

p->next=null;

free(p);

return 0;

}//鍊錶的銷毀--》從最後乙個節點開始(從後往前)乙個個刪除

int destroy_list(plist head)

for(int i=0; inext!=null) //p的下乙個節點不為null

return 0;

}int main()

#include "myhead.h"

//封裝乙個結構體表示單向迴圈鍊錶

typedef struct siglist

list,*plist;

//鍊錶的初始化

plist init_list()

//插入資料(尾部插入)

int insert_tail(int newdata,plist head)

//插入資料,中間插入 把newdata插入到olddata的後面

int insert_mid(int olddata,int newdata,plist head)

//迴圈結束,並且最後乙個節點也不等於olddata,說明沒有olddata

if(p->next==null && p->data!=olddata)

//把新的節點插入到p的後面

newnode->next=p->next;

p->next=newnode;

return 0;

}//單鏈表刪除,只用乙個指標(有bug的,刪除不乾淨)

int remove_list(int deldata,plist head)

//刪除p後面的乙個節點

p->next=p->next->next; //刪除得不夠徹底

return 0;

}//用兩個指標刪除節點

int remove_list2(int deldata,plist head)

p=p->next;

q=q->next;

} //判斷最後乙個節點,剛才迴圈漏掉了

if(p->data==deldata)

//判斷deldata不存在的情況

if(flag==0)

return 0;

}//每次刪除鍊錶的最後乙個節點

int remove_tail(plist head)

//刪除節點

q->next=p->next;

p->next=null;

free(p);

return 0;

}//鍊錶的銷毀--》從最後乙個節點開始(從後往前)乙個個刪除

int destroy_list(plist head)

for(int i=0; inext!=null) //p的下乙個節點不為null

return 0;

}int main()

資料結構和演算法 二

public static void main string args throws exception objects temp objects size value size 修改 public void set int index,object value throws exception o...

資料結構和演算法(二)

基本思想 後進先出 先進後出 即棧中元素被處理時,按後進先出的順序進行,棧又叫後進先出表 lifo 舉例 日常生活中有很多棧的例子。例如,放在書桌上的一摞書,只能從書頂上拿走一本書,書也只能放在頂上。對於棧來說,入棧,出棧,棧是否為空,棧頂。等方法。使用陣列來模擬棧的操作的 public class...

資料結構演算法(二)

單調棧給定乙個長度為 n 的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入格式 第一行包含整數 n,表示數列長度。第二行包含 n 個整數,表示整數數列。輸出格式 共一行,包含 n 個整數,其中第 i 個數表示第 i 個數的左邊第乙個比它小的數,如果不存在則輸出 1。資料範圍 1...