您的位置:首页 > 其它

单链表的基本操作

2010-06-23 09:40 441 查看
#include"iostream.h"
#include"stdio.h"

#include"string.h"

struct Node
{
int date;
Node* next;
};

Node* create() //
{
Node* head, *phead, *p1;

head = new Node;
head->next = NULL;
head->date = NULL;
phead = head;
int data;
cin>>data;
while(data)
{
p1 = new Node;
p1->date = data;
phead->next = p1;
phead = p1;
phead->next = NULL;
cin>>data;
}
return head;
}

Node* reverse(Node* head)
{
Node* ptemp = head->next ;
Node* p,*pstr,*pu;
p = new Node;
p->next = NULL;
p->date = NULL;
pstr = p;
while(ptemp != NULL && pu != NULL)
{
pu = ptemp->next ;
ptemp->next = p->next ;
p->next = ptemp;
ptemp = pu;

}
delete head;
head = NULL;
return pstr;
}

void print(Node* head)
{
Node* ptemp = head;
while(ptemp->next != NULL)
{
ptemp = ptemp -> next ;
cout<<ptemp->date <<" ";
}
cout<<endl;
}

Node* Del(Node*head, int num)
{
Node* p1, *p2;
p1 = head;
if(head == NULL || head->next == NULL)
{
return head;
}
while(num != p1->date && p1->next !=NULL)
{
p2 = p1;
p1 = p1->next;
}
if(p1->date == num)
{
if(p1 == head)
{
head = p1->next ;
}
else
{
p2->next = p1->next ;
}
delete p1;
p1 = NULL;
}
else
{
cout<<"not fount"<<endl;
}
return head;
}

Node* Inser(Node* head, Node*p)
{
Node*ptemp = head;
Node*pstr;
while(p->date > ptemp->date && ptemp->next != NULL)
{
pstr = ptemp;
ptemp = ptemp->next ;
}
if(p->date <= ptemp->date )
{
if(ptemp == head)
{
head = p;
p->next = ptemp;
}
else
{
pstr->next = p;
p->next = ptemp;
}
}
else
{
ptemp->next = p;
p->next = NULL;
}
return head;
}

void main()
{
Node* p,*pst,*ptu;
cout<<"请输入一个链表:"<<endl;
p = create();
cout<<endl<<"链表输出:"<<endl;
print(p);
cout<<"****************"<<endl;
pst = reverse(p);
cout<<"链表逆序输出:"<<endl;
print(pst);
ptu = Del(pst,1);
cout<<"删除一个节点后输出"<<endl;
print(ptu);

Node* pt,*pm;
pt = new Node;
pt->date = 10;
pt->next = NULL;
pm = Inser(ptu, pt);
cout<<"插入一个节点后输出"<<endl;
print(pm);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: