算法与数据结构实战实验——线性数据结构实现与应用(使用java)
實驗目的——通過實驗達到:
⑴ 理解和掌握線性結構的概念及其典型操作的算法思想;
⑵ 熟練掌握基本線性結構的鏈式存儲結構及其操作的實現;
⑶ 理解和掌握受限線性結構——堆棧、隊列的概念及其典型操作的算法思想、實現。
題目1:一元多項式的操作
設有兩個一元多項式:
p(x)=p0+p1x+p2x2+···+pnxn
q(x)=q0+q1x+q2x2+···+qmxm
多項式項的系數為實數,指數為整數,設計實現一元多項式操作的程序:
① 多項式鏈表建立:以(系數,指數)方式輸入項建立多項式,返回所建立的鏈表的頭結點;
② 多項式排序:將所建立的多項式按指數非遞減(從小到大)進行排序;
③ 多項式相加:實現兩個多項式相加操作。操作生成一個新的多項式,原有的兩個多項式不變,返回生成的多項式的頭結點;
④ 多項式的輸出;
⑤ 主函數通過調用多項式鏈表建立函數,輸入兩個多項式并分別輸出;輸出排序后的兩個多項式;分別調用多項式相加函數實現多項式相加、相減操作,分別輸出操作結果。
⑴ 所定義的數據結構:
class node{int a;//系數int b;//指數node next=null;node(int i,int j){a=i;b=j;} }⑵ 主要操作算法思想或算法步驟:
package edu.dgut.experiment.one;//數據結構 class node{int a;//系數int b;//指數node next=null;node(int i,int j){a=i;b=j;} }//鏈表及其操作 public class Link {node head=null;//頭結點//創建鏈表/*Link(int n){}*///添加結點public void addNode(int a,int b){node newNode=new node(a,b);if(head==null) {//判斷是否添加至頭結點head=newNode;return;}//從尾部添加node temp=head;while(temp.next!=null) {temp=temp.next;}temp.next=newNode;}//排序(冒泡)public void sort() {if(head == null || head.next == null) { //鏈表為空或者僅有單個結點//System.out.println("");return;}node cur = head, tail = null;while(cur.next != tail){while(cur.next != tail){if(cur.b > cur.next.b){int tmp1 = cur.b;cur.b = cur.next.b;cur.next.b = tmp1;int tmp2 = cur.a;cur.a = cur.next.a;cur.next.a = tmp2;}cur = cur.next;}tail = cur; //下一次遍歷的尾結點是當前結點cur = head; //遍歷起始結點重置為頭結點}return;}//輸出public void print() {sort();//————以排序為前提node cur=head;//排序后的第一項if(cur.a==1&&cur.b==1)System.out.print("x");else if(cur.a==1&&cur.b!=1)System.out.print("x^"+cur.next.b);else if(cur.a!=1&&cur.b==1)System.out.print(cur.a+"x");else {System.out.print(cur.a+"x^"+cur.b);}//排序后第一項以后while(cur.next!=null) {if(cur.next.a==1)System.out.print("+"+"x^"+cur.next.b);elseSystem.out.print("+"+cur.next.a+"x^"+cur.next.b);cur=cur.next;}}//多項式相加public node addLink(node h2) {node h1=head;Link newLink = new Link();node cur1=h1,cur2=h2;//將cur2中各項添加到cur1或newLink中的headwhile(cur2!=null) {boolean isAdd=false;while(cur1!=null) {if(cur1.b==cur2.b) {cur1.a+=cur2.a;//添加到cur1isAdd=true;break;}cur1=cur1.next;}if(!isAdd) {//添加到newLink中的headnewLink.addNode(cur2.a, cur2.b);}cur1=h1;cur2=cur2.next;}//將cur1各項添加到newLink中的head尾部while(cur1!=null) {newLink.addNode(cur1.a, cur1.b);cur1=cur1.next;}newLink.sort();//排序this.head=newLink.head;return newLink.head;}public static void main(String[] args) {System.out.println("多項式1:");Link link1 = new Link();link1.addNode(1, 1);link1.addNode(4, 4);link1.addNode(3, 3);link1.sort();link1.print();System.out.println();System.out.println("多項式2:");Link link2 = new Link();link2.addNode(2, 2);link2.addNode(4, 4);link2.addNode(3, 3);link2.sort();link2.print();System.out.println();System.out.println("多項式相加:");link2.addLink(link1.head);link2.print();} }題目2:順序循環隊列的基本操作
設隊列的元素類型為char,實現順序循環隊列的各種基本操作的程序:
① 初始化隊列Q;
② 判斷隊列Q是否為空;
③ 入隊操作。循環調用入隊操作,將若干元素(不少于10個)入隊;
④ 出隊操作,出隊一個元素,并輸出該元素;
⑤ 輸出隊列元素個數;
⑥ 調用入隊操作,依次入隊4個元素;
⑦ 輸出隊列序列;
⑧ 主函數通過函數調用實現以上各項操作。
⑴ 所定義的數據結構:
class qnode{char data;qnode next=null;qnode(char c){this.data=c;} }⑵ 主要操作算法思想或算法步驟:
package edu.dgut.experiment.one;//數據結構 class qnode{char data;qnode next=null;qnode(char c){this.data=c;} } //相關操作 public class Queue {qnode head=null;qnode tail=null;int num=0;//隊列元素個數//初始化Queue(){head=tail;}//判空public boolean isEmpty() {if(head==null) return true;elsereturn false;}//入隊public void push(char c) {qnode newNode = new qnode(c);if(head==null) {head=newNode;tail=head;num++;return;}tail.next=newNode;tail=tail.next;num++;}//出隊//出隊一個元素,并輸出該元素public void pop() {if(head==null||num==0) {System.out.println("隊列為空!");return;}qnode node=head;System.out.println("出隊:"+node.data);num--;//元素減一head=head.next;//后移node=null;}//隊列元素個數public int getQueueNum() {return num;}//輸出隊列序列public void print() {int i=num;int count=1;//元素個數計數器qnode node=head;while(i>0) {System.out.println("第"+count+"個元素:"+node.data);node=node.next;count++;i--;}}public static void main(String[] args) {//創建隊列Queue Q = new Queue();//判斷隊列是否為空if(Q.isEmpty())System.out.println("隊列為空!");elseSystem.out.println("隊列不為空!");//循環入隊15個元素for(int i=0;i<15;i++) {Q.push('a');}//出隊一個元素Q.pop();//輸出隊列元素個數System.out.println("隊列元素個數為:"+Q.getQueueNum());//入隊4個元素Q.push('A');Q.push('B');Q.push('C');Q.push('D');//輸出隊列序列System.out.println("輸出隊列序列:");Q.print();} }總結
以上是生活随笔為你收集整理的算法与数据结构实战实验——线性数据结构实现与应用(使用java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d 简单消除游戏算法 (一)
- 下一篇: Cocoa Application-基础