对于链表几天的学习体会:
1.先做一个main()函数里的读入:
#include<bits/stdc++.h>
using namespace std;
typedef struct _node{
int value;
struct _node *Next;
}Node;
int main()
{
//读入很多number 到-1
Node *head=NULL;//表头
int number;
do{
cin>>number;
if(number!=-1)
{
Node *p=(Node*)malloc(sizeof(Node));//制作Node的结构体
p->value=number;
p->Next=NULL;
Node *last=head;
if(last)
{
while(last->Next)
last=last->Next;
last->Next=p;
}
else{
head=p;
}
}
}while(number!=-1);
while(head)
{
cout<<head->value<<endl;
head=head->Next;
}
return 0;
}
2.然后自定义了个函数,其实这样对于写算法来说是麻烦的,不如直接把head定义成全区变量,但是这是一种常规操作;
#include<bits/stdc++.h>
using namespace std;
typedef struct _node{
int value;
struct _node *Next;
}Node;
typedef struct _list{
Node* head;
//Nde* tail;
}List;
void add(List* plist,int number);
int main()
{
//读入很多number 到-1
List lista;
lista.head=NULL;
int number;
do{
cin>>number;
if(number!=-1)
{
add(&lista,number);
}
}while(number!=-1);
while(lista.head)
{
cout<<lista.head->value<<endl;
lista.head=lista.head->Next;
}
return 0;
}
void add(List* plist,int number)
{
Node *p=(Node*)malloc(sizeof(Node));//制作Node的结构体
p->value=number;
p->Next=NULL;
Node *last=plist->head;
if(last)
{
while(last->Next)
last=last->Next;
last->Next=p;
}
else{
plist->head=p;
}
}
方法二
这样会看着简单很多#include<bits/stdc++.h> using namespace std; typedef struct _node{ int value; struct _node *Next; }Node; Node* add(Node* head,int number); int main() { //读入很多number 到-1 Node *head=NULL;//表头 int number; do{ cin>>number; if(number!=-1) { head=add(head,number); } }while(number!=-1); while(head) { cout<<head->value<<endl; head=head->Next; } return 0; } Node* add(Node* head,int number) { Node *p=(Node*)malloc(sizeof(Node));//制作Node的结构体 p->value=number; p->Next=NULL; Node *last=head; if(last) { while(last->Next) last=last->Next; last->Next=p; } else{ head=p; } return head; }
3.写了对输出自定义函数的实现。
#include<bits/stdc++.h>
using namespace std;
typedef struct _node{
int value;
struct _node *Next;
}Node;
typedef struct _list{
Node* head;
//Nde* tail;
}List;
void add(List* plist,int number);
void print(List *lista);
int main()
{
//读入很多number 到-1
List lista;
lista.head=NULL;
int number;
do{
cin>>number;
if(number!=-1)
{
add(&lista,number);
}
}while(number!=-1);
print(&lista);
return 0;
}
void add(List* plist,int number)
{
Node *p=(Node*)malloc(sizeof(Node));//制作Node的结构体
p->value=number;
p->Next=NULL;
Node *last=plist->head;
if(last)
{
while(last->Next)
last=last->Next;
last->Next=p;
}
else{
plist->head=p;
}
}
void print(List *lista)
{
Node* p;
for(p=lista->head;p;p=p->Next)
cout<<p->value<<'\t';
cout<<endl;
}
总结:对链表的删除我决定还是用自定函数写吧,决定用我学到的数据结构的线性表来写。