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