java利用由结构类型chNode形成的链表来存储字符串
需求分析
利用由结构类型chNode形成的“链表”来存储字符串。
输入形式:输入结点的个数及字符,字符串的长度及字符
输出形式:输出链表以及字符串
程序所能达到的功能:具有void catStr (char* a, chNode* p); void displayStr (chNode* p)和void getStr (char *b, chNode* p)三个功能
测试的数据:结点的字符:abcd 字符串的字符:efgh
6.2 概要设计
本题的主要设计思路:定义一个结点的类,用于存放结点的字符以及结点的后继项。然后定义一个主类,依次调用catStr(),displayStr(),getStr(),sort()等方法。实现链表的串接、链表的显示、字符串的赋值以及对结点进行排序,主要是与输入对应。
6.3 详细设计与编码
见上传程序。
6.4 调试分析
刚开始做这个实验时,对怎样去定义后继结点出现了一些问题,因为我一直以为不能在一个类中定义同样的类的实例变量。然后在输出上也有一些问题,输出时总是与输入时相反,所以我就调用了sort()函数将chNode的字符进行重新赋值。
6.5 用户使用说明
用户根据程序的提示输入适当的值。
6.6 测试数据
输入结点的个数:4 输入字符:a b c d
输入字符串的长度:4 输入字符串的字符:e f g h
输出结果:
6.7 设计心得:
在这次实验中,无意间我用到了Java的泛型类ArrayList,在这个类中,我可以加入后面定义的类型,在此实验中用了chNode类型,主要进行链表的连接。通过这次实验,我学会了怎样去编写一个链表。其实这个功能在ArrayList中早已存在,而我只不过去覆盖了这个功能。
import java.util.*;
class StringOperation {
public void catStr(char[] a){ //将字符串a加到链表中
chNode[] str_a=new chNode[a.length];
str_a[a.length-1]=new chNode(a[a.length-1],null); //先创建最后一个结点,且next指向空
for(int i=a.length-2;i>=0;--i){ //创建其它结点
str_a[i]=new chNode(a[i],str_a[i+1]);
}
for(int i=0;i<str_a.length;++i) //逐个加入到链表中,且在node之后
list.add(str_a[i]);
}
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/ }
System.out.println();
}
public void getStr(char[] b){ //将链表中的元素赋给字符串数组b
for(int i=0;i<list.size();++i)
b[i]=list.get(i).getChar();
}
public static void main(String[] args){
System.out.print("/*************************************************\n\n"+
"File name: 软件设计课程设计基础题21(基础题21.java)\n\n"+
"Author: 计06-1 郭献铮 Date: 08.12.8\n\n"+
"Description: 利用由结构类型chNode形成的“链表”来存储字符串;\n\n"+
"Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明\n\n"+
"1.main()函数 完成各种提示与主操作输入输出\n\n"+
"2.catStr()函数 将字符串加入到链表的尾部;\n\n"+
"3.displayStr()函数 显示链表,输出链表的元素;\n\n"+
"4.getStr()函数 将链表中的元素赋值给字符串数组;\n\n"+
"5.sort()函数 对创建的结点进行排序;\n\n"+
"6.chNode类 表示结点的类型,其中域包括字符,后继结点;\n\n"+
"*****************************************************/\n\n");
System.out.print("请输入结点的个数:");
Scanner in=new Scanner(System.in);
int num=in.nextInt();
chNode[] node=new chNode[num];
System.out.println("结点的字符(空格隔开):");
in=new Scanner(System.in);
node[node.length-1]=new chNode(in.next().charAt(0),null);
for(int i=node.length-2;i>=0;--i)
node[i]=new chNode(in.next().charAt(0),node[i+1]);