单向链表的创建、输出、删除、 插入的代码以及分析
一、 链表的创建
结构体
struct node { int num,cj; node *next; } data;
用*next指向下一个结构体的地址来连接链表,注意最后一个要指向NULL(即空指针)
---->[p1]---->[p2]...---->[pn]---->[NULL]
head p1->next p2->next pn->next
int main() { node *p,*q; int n; while(cin>>n) { for(int i=0;i<n;i++) { if(i==0) { p=(struct node *)malloc(sizeof(struct node)); q=p; cin>>p->num>>p->cj; } else { p->next=(struct node *)malloc(sizeof(struct node)); p=p->next; cin>>p->num>>p->cj; } } p->next=NULL; } return 0; }
二、链表的输出
此时要注意指针的传递p=p->next;
以及是while(p!=NULL)为结束标志
void show(struct node *p) { while(p!=NULL) { cout<<p->num<<" "<<p->cj<<endl; p=p->next; } }
三、链表的删除
若是删除中间的节点
---->[1]---->[2]---->[3]...---->[n]---->[NULL](原链表)
head 1->next 2->next 3->next n->next
----->[1]---->[3]...---->[n]---->[NULL](删除后链表)
head 1->next 3->next n->next
若是删除第一个节点
---->[1]---->[2]...---->[n]---->[NULL](原链表)
head 1->next 2->next n->next
---->[2]...---->[n]---->[NULL](删除后链表)
head 2->next n->next
总结一下!
1、删除第一个节点 q=q->next;
2、删除第i个节点 p(i-1)->next=(p(i-1)->next)->next; (即p(i-1)->next=p(i)->next
void del(struct node *p,int n) { struct node *t; while(p!=NULL) { if(p->num==n) { t=p; q=p->next; free(t); break; } if((p->next)->num==n) { t=p->next; p->next=(p->next)->next; free(t); break; } p=p->next; } }
四、链表的插入
功能:插入指定节点的后面 (此例中是指定学号的节点)
void ins(struct node *p,int m,int n,int k) { struct node *w; while(p!=NULL) { if(p->num==m) break; p=p->next; } w=(struct node *)malloc(sizeof(struct node)); w->next=p->next; p->next=w; w->num=n; w->cj=k; }
持续更新ing......
时间: 2024-10-29 19:12:30