1.认识单链表
按照我个人的理解,单链表就是一排连在一起箱子,不过只有前一个箱子可以与后一个箱子相连。
话不多说,接下来单链表的初始化,插入,删除,查找,输出。
首先是初始化:
typedef struct mylist{
typename data;
struct mylist *next;
}ml;//typedef可以将mylist等价于ml
ml make(int n){
ml head=new ml;
ml *p=head,*r;
for(int i=1;i<=n;i++){
r=new ml;
//做相应操作
r->next=NULL;
p->next=r;
p=r;
}
return a;
}
再是插入数据,其中pop(ml &*head,int n)是指在第n个元素后一个插入,伪代码如下:
void push(ml &*head,int n){
ml *p=head,*r;
for(int i=1;i<=n;i++)
p=p->next;
r=new ml;
//做相应操作
r->next=p->next;//将r插入p与p->next之间
p->next=r;
}
接着是删除,其中pop(ml &*head,int n)是指将第n个元素删除,伪代码如下:
void pop(ml &*head,int n){
ml *p=head;
for(int i=1;i<n;i++)
p=p->next;
p->next=p->next->next;
while(p->next!=NULL){
p=p->next;
p->num--;
}
}
然后是查找:
void Find(ml *head,int n){
ml *p=head;
for(int i=1;i<=n;i++){
p=p->next;
}
//做相应操作
}
最后是输出:
void out(ml *head){
ml *p=head->next;
while(p->next!=NULL){
cout<< //做相应操作
p=p->next;
}
}
最后总结如下:
#include<iostream>
using namespace std;
typedef class school{
public:
void make(int n);
void push(int n);
void pop(int n);
void out();
void Find(int n);
typedef struct student{
int num;
string name;
struct student *next;
}node;
private:
node *head;
}data;
void data::make(int n){
head=new node;
node *p=head,*r;
for(int i=1;i<=n;i++){
r=new node;
r->num=i;
cout<<"请输入第"<<i<<"个学生的名字:";
cin>>r->name;
r->next=NULL;
p->next=r;
p=r;
}
}
void data::push(int n){
node *p=head,*r;
for(int i=1;i<=n;i++)
p=p->next;
r=new node;
r->num=n+1;
cout<<"请输入新的学生的名字:";
cin>>r->name;
r->next=p->next;
p->next=r;
while(r->next!=NULL){
r=r->next;
r->num++;
}
}
void data::pop(int n){
node *p=head;
for(int i=1;i<n;i++)
p=p->next;
p->next=p->next->next;
while(p->next!=NULL){
p=p->next;
p->num--;
}
}
void data::out(){
node *p=head->next;
while(p->next!=NULL){
cout<<"第"<<p->num<<"个学生的名字为:"<<p->name<<endl;
p=p->next;
}
cout<<"第"<<p->num<<"个学生的名字为:"<<p->name<<endl<<endl;
}
void data::Find(int n){
node *p=head;
for(int i=1;i<=n;i++){
p=p->next;
}
cout<<"学号为"<<p->num<<"的学生的名字是"<<p->name;
}
int main(){
return 0;
}
家人们,以上代码先卖个关子,时间有点紧,下一期加强一下解释。
侵删。