这一篇有一点点的难度,但不用担心,读者耐心看注释,相信能够很快的体会到构建链表的过程,这里我就不在赘述理论了,直接给出代码:
node *p,*u;
p = head;
int j = 0;
while(j!=i-1&& p != NULL ){
p=p-> next;//数结点
j ++;
}
if ( i < 1 || i > count )
// if ( p == NULL ||p->next==NULL )
return rangeerror;//数到p时为空,没有取到,说明结点根本就不在
u=p->next;
p->next=u->next;
delete u;
count --;
return success;
}
//头插法建表
void link_list::write1(){
elementtype x;
node *s;
cout<<"请输入要存入的数据个数(提示:使用头插法构建链表,意味着数据逆序): ";
int a;
cin >>a;
for(int i=1;i<=a;i++){
cout<<"请输入要存的第"<<i<<"个数据: ";
count ++;
cin >> x;
s=new node;//定义一个新结点来添加数据
s->data=x;//将数据填入新结点
s->next=head->next;//新结点是原来头结点指的位子
head->next=s;//头指针指向新结点
}
}
//尾插法建表
void link_list::write2(){
elementtype x;
node *s,*rear;
rear = head;
cout<<"请输入要存入的数据个数(提示:使用尾插法构建链表,意味着数据顺序)): ";
int a;
cin >>a;
for(int i=1;i<=a;i++){
cout<<"请输入要存的第"<<i<<"个数据: ";
cin>>x;
count++;
s=new node;//定义一个新结点来添加数据
s->data=x;//将数据填入新结点
s->next=NULL;//新结点是原来尾指针指的位子
rear->next=s; //尾指针指向新结点
rear=s;//尾指针指向新结点的后一位
}
}
//读链表数据,其实就是遍历一遍结点
void link_list::read(){
node *p;
p=head->next;//定义p指向第一个结点
cout<<"链表中数据的顺序存储为:"<<endl;
while (p!=NULL){
cout<<p->data<<" ";//打印出结点输出
p=p->next;//数下一个结点
}
cout<<endl;
}
void main()
{
link_list l1,l2;
l1.write1();
l1.read();
l2.write2();
l2.read();
}
读者先实验后体会,相信会有收获。