刚接触面相对象,自己猜着写的,请多指教
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
template <class ElementType>
class List
{
private :
typedef struct Lnode
{
ElementType x;
struct Lnode *next;
} *Ltnode;
Ltnode head = NULL;
int length;
public :
int n;
void BeforeRead()
{
length = 0;
}
bool Read(ElementType &t)
{
if(length++ < n)
{
scanf("%d", &t);
//if(t == -1) return false;
return true;
}
return false;
}
Ltnode Gethead()
{
return head;
}
void ProperList();
void InorderList();
void InvertedList();
void oddMake(Ltnode head2);
void evenMake(Ltnode head2);
void ReverseList();
void Newnode(Ltnode &p)
{
p = (Ltnode) malloc( sizeof(struct Lnode) );
p->next = NULL;
p->x = 0;
}
void ListMerge(Ltnode head2);
void PrintL();
int size()
{
return length;
}
};
template <class ElementType>
void List<ElementType>::ProperList()
{
Newnode(head);
Ltnode tail = head;
ElementType t;
BeforeRead();
while(Read(t))
{
Ltnode p;
Newnode(p);
p->x = t;
tail->next = p;
tail = tail->next;
}
}
template <class ElementType>
void List<ElementType>::InorderList()
{
Newnode(head);
ElementType t;
BeforeRead();
while(Read(t))
{
Ltnode e = head;
while(e->next && e->next->x < t)
{e = e->next;}
Ltnode p;
Newnode(p);
p->next = e->next;
p->x = t;
e->next = p;
}
}
template <class ElementType>
void List<ElementType>::InvertedList()
{
Newnode(head);
ElementType t;
while(Read(t))
{
Ltnode p;
Newnode(p);
p->x = t;
p->next = head->next;
head->next = p;
}
}
template <class ElementType>
void List<ElementType>::oddMake(Ltnode head2)
{
Newnode(head);
BeforeRead();
Ltnode q = head2->next, tail = head, f = head2;
head->next = NULL;
while(q)
{
if(q->x & 1)
{
length++;
f->next = q->next;
tail = tail->next = q;
q = q->next;
continue;
}
q = q->next;
f = f->next;
}
tail->next = NULL;
}
template <class ElementType>
void List<ElementType>::evenMake(Ltnode head2)
{
Newnode(head);
BeforeRead();
Ltnode q = head2->next, tail = head, f = head2;
head->next = NULL;
while(q)
{
if((q->x+1) & 1)
{
length++;
f->next = q->next;
tail = tail->next = q;
q = q->next;
continue;
}
q = q->next;
f = f->next;
}
tail->next = NULL;
}
template <class ElementType>
void List<ElementType>::ReverseList()
{
Ltnode p = head->next;
Ltnode q;
head->next = NULL;
while(p)
{
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}
}
template <class ElementType>
void List<ElementType>::ListMerge(Ltnode head2)
{
Ltnode p = head->next, q = head2->next, tail = head;
head->next = NULL;
while(p&&q)
{
if(p->x < q->x)
{
tail = tail->next = p;
p = p->next;
}
else
{
tail = tail->next = q;
q = q->next;
}
}
if(p)
{
tail->next = p;
}
if(q)
{
tail->next = q;
}
}
/*
template <class ElementType>
void Listmerge2(List<ElementType> &L1)
{
List<ElementType> L2;
scanf("%d %d", &L1.n, &L2.n);
L1.ProperList();
L2.ProperList();
L1.ListMerge(L2.Gethead());
}
*/
template <class ElementType>
void List<ElementType>::PrintL()
{
if(head && head->next)
{
Ltnode t = head->next;
while(t->next)
{
printf("%d ", t->x);
t = t->next;
}
printf("%d\n", t->x);
}
else
printf("The list is empty!\n");
}
int main()
{
List<int> L;
scanf("%d", &L.n);
L.InorderList();
L.PrintL();
return 0;
}