import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.log4j.Logger;
/*
* 实现一个泛型链表类接口,
1.链表增加一个节点,
2.指定位置增加一个节点
3.删除指定位置的节点
4.删除某种内容的所有节点
加上日志
* */
public class LinkMe {
public static void main(String args[]){
//BasicConfigurator.configure ();
//PropertyConfigurator.configure ( "D:/workspace/HomeWork/src/log4j.properties");
MyLink<String> l = new MyLink<>("l","String");
l.insertFirst("zhang san");
l.insertFirst("li si");
l.insertFirst("wang wu");
l.insertFirst("zhao liu");
l.printMyLink();
l.del(4);
l.printMyLink();
l.insert(3, "new Man");
l.printMyLink();
l.delZD("li");
l.printMyLink();
System.out.println();
MyLink<Integer> in = new MyLink<>("in","Integer");
in.insertFirst(1);
in.insertFirst(2);
in.insertFirst(3);
in.printMyLink();
in.del(2);
in.printMyLink();
in.insert(2, 5);
in.printMyLink();
}
}
class MyLink<E>{
Logger logger = Logger.getLogger(LinkMe.class.getName());
private LinkData<E> first;
private static int no;
MyLink(String name,String lx){
first = null;
no=0;
logger.debug("---------------------------------------");
logger.debug(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()));
logger.debug("新建一个链表:"+name+",类型为"+lx);
}
public void insertFirst(E aName){ //每次在链表尾部插入
LinkData<E> ld = new LinkData<>(aName);
ld.setNext(first);
first = ld;
no++;
}
public void insert(int aI,E aName){ //指定位置插入节点
int i = 1;
LinkData<E> ld = new LinkData<>(aName);
LinkData<E> t = first;
logger.debug("在节点"+aI+"插入:"+ aName );
if (aI == 1 || aI < 1) {
insertFirst(aName);
} else if(aI>no) {
while(t.getNext()!=null){
t = t.getNext();
}
t.setNext(ld);
ld.setNext(null);
} else {
while(++i!=aI){
t = t.getNext();
}
LinkData<E> tl = t ;
ld.setNext(tl.getNext());
t.setNext(ld);
}
no++;
}
public void delZD(String str){ //删除包含某种字符的所有节点
LinkData<E> t = first;
int i = 1;
while(t.getNext()!=null){
if(i==1&&((String)t.getName()).indexOf(str)!=-1){ //删除第一个
first = first.getNext();
t = first;
no--;
}
i++;
if(((String)t.getNext().getName()).indexOf(str)!=-1){ //删除非第一个
t.setNext(t.getNext().getNext());
no--;
}else{
t=t.getNext();
}
}
}
public void del(int aI){ //删除指定节点
LinkData<E> t = first;
int i = 1;
boolean note = false;
while(t.getNext()!=null){
if(aI==1&&i==aI){ //删除第一个
first = first.getNext();
t = first;
note=true;
no--;
}
if(++i==aI){ //删除非第一个
t.setNext(t.getNext().getNext());
note=true;
no--;
}else{
t=t.getNext();
}
}
if(note){
logger.debug("删除节点"+aI);
}else{
logger.debug("删除节点"+aI);
}
}
public void printMyLink(){
LinkData<E> t = first;
String str = "";
while(t!=null){
str += t.getName()+",";
t = t.getNext();
}
if(str!=""){
logger.debug(str+" 共"+no+"个节点");
}
}
}
class LinkData<E>{ //定义节点
private E name;
private LinkData<E> next;
LinkData(E aName){
setName(aName);
}
public LinkData<E> getNext() {
return next;
}
public void setNext(LinkData<E> next) {
this.next = next;
}
public E getName() {
return name;
}
public void setName(E aName) {
this.name = aName;
}
}
/*
* 建一个队列类
* */
public class QueueMe {
public static void main(String args[]){
QueueList q = new QueueList(7);
q.insert("a");
q.insert("b");
q.insert("c");
q.insert("d");
q.insert("e");
q.insert("f");
q.printQueue();
q.del();
q.del();
q.printQueue();
q.insert("a1");
q.insert("b1");
q.printQueue();
q.del();
q.del();
q.del();
q.del();
q.del();
q.del();
q.del();
q.del();
q.printQueue();
}
}
class QueueList{
public int font;
public int rear;
public int size;
public int num;
public String[] arr;
QueueList(int aI){
size = aI;
arr = new String[size];
font = 0;
rear = 0;
num = 0;
}
public void insert(String aI){
if (!isFull()) {
if(arr[size-1]!=null){ //到栈顶后从底下插入
rear = 0;
}
arr[rear++] = aI;
num++;
}
}
public void del(){
if(!isEmpty()){
if (font==size) {
font = 0;
}
arr[font] = null;
font++;
num--;
}
}
public boolean isFull(){
if(num>=size){
System.out.println("queue is full,can not insert.");
return true;
}else{
return false;
}
}
public boolean isEmpty(){
if(num==0){
System.out.println("queue is null,can not del.");
return true;
}else{
return false;
}
}
public void printQueue(){
for(String i:arr)System.out.print(i+" ");
System.out.println();
}
}