#include<iostream>
#include<cstdio>
using namespace std;
typedef struct node{
char value;
struct node*next;
}linklist;
linklist *Create_ListF(){///头插法创建单链表
char ch;
linklist *head,*p;
head=NULL;
while(cin>>ch)
{
if(ch=='#')///输入# 停止输入
break;
p=(linklist*)malloc(sizeof(linklist));
p->value=ch;
p->next=head;
head=p;
}
return head;
}
linklist *Create_ListR(){///尾巴插法创建单链表
char ch;
linklist *head,*p,*r;///r为 尾指针
head=NULL;
r=NULL;
while(cin>>ch)
{
if(ch=='#')///输入# 停止输入
break;
p=(linklist*)malloc(sizeof(linklist));
p->value=ch;
if(head==NULL) head=p;
else r->next=p;///尾插
r=p;///移动尾指针
}
if(r!=NULL) r->next=NULL;
return head;
}
linklist *Create_ListR_head_insert()///带头结点得尾插法创建单链表
{
char ch;
linklist *head,*r,*p;
head=(linklist*)malloc(sizeof(linklist));///创建头节点;
r=head;
while(cin>>ch)
{
if(ch=='#')///输入# 停止输入
break;
p=(linklist*)malloc(sizeof(linklist));
p->value=ch;
r->next=p;
r=p;
}
r->next=NULL;
return head;
}
linklist * Search_Id_key(linklist *head,int i){///查找第i 个节点
int j;
linklist *p;
p=head;
j=0;
while(p->next!=NULL&&(j<i))
{
p=p->next;
j++;
}
if(i==j)
return p;
else
return NULL;
}
linklist * Search_Value(linklist *head,char value){///按照值查找查找
linklist *p;
p=head->next;
while(p!=NULL&&(p->value!=value))
p=p->next;
if(p==NULL) return NULL;
else
return p;
}
void Insert_PointAfter(linklist *head,linklist *p,char value){///在P节点后插入 value
linklist *q,*s;
s=(linklist*)malloc(sizeof(linklist));
s->value=value;
q=head;
while(q!=p) q=q->next;
s->next=q->next;
q->next=s;
}
void Insert_PointBefore(linklist *head,linklist *p,char value){///在p 节点以后插入节点S
linklist *s,*q;
s=(linklist*)malloc(sizeof(linklist));///生成插入节点*s
s->value=value;
q=head;
while(q->next!=p)q=q->next;
s->next=p;
q->next=s;
}
void Delete(linklist *head, linklist *p){
linklist *q;
q=head;
while(q->next!=p) q=q->next;
q->next=p->next;
free(p);
}
int main()
{
// linklist *s=Create_ListF();///不带头节点前插入
// linklist *s=Create_ListR();///不太头节点后插
linklist *s=Create_ListR_head_insert();///带头节点插入法
linklist *p=Search_Id_key(s,3);///按节点id查找
linklist *t= Search_Value(s,'A');///按照值查找
Insert_PointAfter(s,t,'C');///T 节点后插
Insert_PointBefore(s,t,'D');///T节点前插
Delete(s,t);///删除T 节点
while(s->next!=NULL)///遍历单链表
{
cout<<s->next->value;
s=s->next;
}
return 0;
}
单链表(创建、查找、删除、插入)
最新推荐文章于 2022-11-08 16:59:38 发布