//网上关于这方面的挺多,由于自己以前上课没好好学数据结构,现在重新认识数据结构,
//以下是自己写的基于C++的单链表的创建及其一些操作,与实现,没用模板,所以适合
//有一点C++基础的人,但可移植不够.有什么bug的话,欢迎指出。或有什么问题也可以联系我
// made by virgil (2009.2.8)
// MSN:hangyu_628@hotmail.com)
#include <iostream>
using namespace std;
int N=10;
typedef struct Node
{
char name[20];
struct Node *next;
}Node;
Node *create(int n)
{
Node *h,*p,*s;
if ((h=new Node)==NULL)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
h->name[0]='/0';
h->next=NULL;
p=h;
for (int i=0;i!=n;++i)
{
if((s=new Node)==NULL)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
p->next=s;
cout<<"请输入第"<<i+1<<"个人的姓名:";
cin>>s->name;
s->next=NULL;
p=s;
}
return h;
}
//查询结点
Node *search(const Node *h, const char *name)
{
Node *p=h->next;
for (int i=0;i!=N;++i)
{
if (strcmp(name,p->name)==0)
{
return p;
}
p=p->next;
}
return p;
}
//后插入
void Insert(Node *p)
{
Node *s;
if ((s=new Node)==NULL)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
cout<<"请输入你要插入的姓名:";
cin>>s->name;
s->next=p->next;
p->next=s;
++N;
}
//查询前向结点
Node* searchPre(Node *head, const char *name)
{
Node *p=head->next;
Node *q=p->next;
for (int i=0;i!=N;++i)
{
if (q!=NULL)
{
if (strcmp(q->name,name)==0)
{
return p;
}
else
{
p=p->next;
q=p->next;
}
}
}
return p;
}
//删除结点
void Delete(Node *p, Node *q) //p为删除的结点指针,q为前一个结点指针
{
q->next=p->next;
delete p;
--N;
};
//显示并释放内存空间...
void display(Node *h)
{
Node *p;
p=h->next;
for (int i=0;i!=N;++i)
{
cout<<"第"<<i+1<<"个人的姓名:"<<p->name<<endl;
delete p;
p=p->next;
}
delete h;
}
int main()
{
Node *head,*p=0,*q=0;
char str[20];
cout<<"创建结点数据如下:"<<endl;
head=create(N);
cout<<endl;
//display(head);
cout<<"所要查询的查询结点是: ";
cin>>str;
//查询当前结点并插入于后
p=search(head,str);
// cout<<"插入结点中...";
// Insert(p);
//查询前驱结点并删除当前结点.
q=searchPre(head,str);
// Insert(q);
Delete(p,q);
// cout<<"插入完的结点数据如下:"<<endl;
display(head);
return 0;
}