c++单链表的创建及相关操作
#include "iostream" using namespace std; //*********************************定义链表结点****************************** typedef int Elemtype ; struct LNode{ Elemtype data; LNode *next; }; typedef LNode *Linklist; //***************************创建单链表*************************************** void input(Elemtype *ep) { cin>>*ep;} void creatlink(Linklist *L, int n, void (*input)(Elemtype*)) { Linklist p,s; p=*L =new LNode; for(;n>0;n--){ s=new LNode; input(&s->data); p->next=s,p=s; } p->next=NULL; } //***********************************************遍历********************** void traverse(Linklist L,void(*visit)(Elemtype *)) { Linklist p=L->next; while(p!=NULL) { visit(&(p->data)); p=p->next; } } void visit(Elemtype *ep){cout<<*ep<<endl;} //*************************************查找结点******************************* int locate(Linklist L,Elemtype e,int(*compare)(Elemtype *,Elemtype*)) { int i=0; Linklist p=L->next; while(p!=NULL) { i++; if(compare(&(p->data),&e)) cout<<i; p=p->next; } return 0; } int compare(Elemtype *ep1,Elemtype *ep2) {return *ep1==*ep2;} //****************************插入结点************************************** int insert(Linklist *L,int i,Elemtype e) { Linklist s,p=*l; while(p!=NULL && i>1) {p=p->next,i--;} if(p==NULL || i<1) return 0; s=new LNode; s->data=e; s->next=p->next,p->next=s; return 1; } //***************************删除结点*************************************** int Sdelete(Linklist *L,int i, Elemtype *ep) { Linklist p=NULL,q=*L; //q指向头结点 while(q!=NULL && i>=1) //查找第i-1个结点 { p=q; // p是q的前驱结点 q=q->next; i--; } if(p==NULL || q==NULL) return 0; p->next=q->next; //删除结点并有*ep返回值 if(ep!=NULL) *ep=q->data; delete q; return 1; } //**************************************************************** int main() { Linklist L;int n=3,e=2; creatlink(&L,n,input); traverse(L,visit); locate(L,e,compare); Sdelete(L,n,&ep); return 0; }
文章来源: https://blog.csdn.net/depth_perception/article/details/90178201