//简单的单链表前插,后插取表头程序。
//用到两个类list和node.
#include<iostream.h>
//using namespace std;
class list;
class node
{
friend list;
node* next;
char* contents;
};
class list
{
private:
node* head;
int size;
int num;
public:
list(int s);
void insert(char *a);
void append(char* a);
char* get();
void clear();
~list();
};
list::list(int s):head(0),size(s),num(0)
{}
void list::insert(char* a) //前插
{
node* temp;
temp=new node;
temp->contents= new char[size];
for(int i=0;i<size;i++)
temp->contents[i]=a[i]; //疑问1:用a[i]赋值合适吗??
//疑问2:浮点数指针强制转换成字符指针后.浮点数后面的部分怎么办??
if(head)
{
temp->next=head;
head=temp;
}
else
{
temp->next=0;
head=temp;
}
num++;
}
/*void list::append(char* a)
{
node* newnode;
newnode->contents=new char[size]; // 错误!list为空时newnode未初始化
for(int i=0;i<size;i++)
newnode->contents[i]=a[i];
newnode->next=0;
if(head)
{
node* p=head;
while(p->next)
p=p->next;
p->next=newnode;
}
else
{
head=newnode;
}
num++;
}
*/
void list::append(char* a) //后插
{
node* previous,*current,*newnode;
if(head)
{
previous=head;
current=head->next;
while(current!=0)
{
previous=current;
current=current->next;
}
newnode=new node;
newnode->contents=new char[size];
newnode->next=0;
for(int i=0;i<size;i++)
newnode->contents[i]=a[i];
previous->next=newnode;
}
else
{
head=new node;
head->contents=new char[size];
head->next=0;
for(int i=0;i<size;i++)
head->contents[i]=a[i];
}
num++;
}
char* list::get() //取表头
{
if(head==0)
cout<<"Error:get form empty list!/n";
else
{
char *r;
node* get_head;
r=new char[size]; //疑问3:未delete,是否内存泄露??
get_head=head;
for(int i=0;i<size;i++)
r[i]=get_head->contents[i];
head=head->next;
delete get_head->contents;
delete get_head;
num--;
return r;
}
}
void list::clear()
{ node* temp=head;
while(temp!=0)
{
node* temp1=temp;
temp=temp->next;
delete temp1->contents;
delete temp1;
num--;
}
}
list::~list()
{
clear();
}
void main()
{
list mylist(5);
float t,*r;
r=&t;
t=1.0;
mylist.insert((char*)r);
t=2.1;
mylist.insert((char*)r);
t=3.1;
mylist.insert((char*)r);
t=4.5;
mylist.insert((char*)r);
t=5.7;
mylist.append((char*)r);
for(int i=0;i<5;i++)
{
r=(float*)mylist.get();
cout<<endl<<*r<<endl;
}
}