c++单链表的创建及相关操作

匿名 (未验证) 提交于 2019-12-02 23:32:01

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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!