zoukankan      html  css  js  c++  java
  • 链表及其操作

    #include<iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #include <string.h>
    #include <math.h>
    using namespace std;
    typedef struct LNode{
        int data;
        struct LNode *next,*prior;
    }LNode,*LinkList;
    //头插法 (顺序与输入顺序相反)
    void CreatList1(LinkList &L){
        LNode *s;
        int x;
        L=(LinkList)malloc(sizeof(LNode));        //创建头结点
        L->next=NULL;
        scanf("%d",&x);
        while(x!=0){
            s=(LNode*)malloc(sizeof(LNode));
            //s.data=x;
            s->data=x;
            s->next=L->next;
            L->next=s;
            scanf("%d",&x);
        }
    
    }
    //尾插法
    void CreatList2(LinkList &L){
        int x;
        L=(LinkList)malloc(sizeof(LNode));
        L->next=NULL;
        LNode *s,*r=L;
        scanf("%d",&x);
        while(x!=0){
             s=(LNode*)malloc(sizeof(LNode));
            s->data=x;
            r->next=s;
            r=s;
            scanf("%d",&x);
    
        }
         r->next=NULL;
    }
    //按序号查找结点值
    
    LNode *getElem(LinkList L ,int i){
        LNode *p=L->next;
        int j=1;
        while(j<i){
            p=p->next;
            j++;
        }
        return p;
    }
    
    //按值查找表结点
    
    LNode *getELem2(LinkList L,int x){
        LNode *p=L->next;
        while(p->data!=x&&p!=NULL){
            p=p->next;
        }
        return p;
    }
    
    //插入结点
    
    void insertNode(LinkList L,int index,LNode *d){
        //在序号index 后面加入节点d
        LNode *s=getElem(L,index);
        cout<<s->data<<"   jia "<<d->data<<endl;
        d->next=s->next;
        s->next=d;
    
    
    }
    //删除结点
    
    void deleteNode(LinkList L,int index){
        //删除第index个结点
        LNode *p=getElem(L,index-1);
        LNode *q=p->next;
        p->next=q->next;
        free(q);
    }
    
    
    /*以下是双链表的操作  ,双链表仅仅是在单链表的基础上加上了前驱结点,
    在单链表中,如果要访问某个结点的前驱结点,只能从头扫描
    但是双链表 有 2 个指针,prior 和 next ,分别指向前驱结点和后继结点。
    */
    
    //双链表的插入操作
    
    void insertNode2(LinkList L,int index,LNode *s){
        //插在第index结点的后面
        LNode *p=getElem(L,index);
        s->next=p->next;
        p->next->prior=s;
        p->next=s;
        s->prior=p;
    }
    
    
    //双链表的删除操作
    
    void deleteNode2(LinkList L,int index){
        //删除第index 个结点
        LNode *p=getElem(L,index);
        p->prior->next=p->next;
        p->next->prior=p->prior;
        free(p);
    }
    int main() { LinkList L; CreatList2(L); LNode *p; p=(LNode *)malloc(sizeof(LNode)); p->data=1000; p->next=NULL; insertNode(L,4,p); //打印链表 LNode *s=L; while(s->next!=NULL){ s=s->next; cout<<s->data<<" "; } cout<<endl; //deleteNode(L,4); int x; printf("请输入要删除的值 "); scanf("%d",&x); cout<<x<<endl; deleteX(x,1,L); LNode *m=L; while(m->next!=NULL){ m=m->next; cout<<m->data<<" "; } cout<<endl; return 0; }
  • 相关阅读:
    日志记录
    python进程基础
    堆和栈的区别
    Mysql数据类型(一)
    JS超链接动态显示图片
    WPF Button控件模板
    js table鼠标点击时变色
    JS表格各行变色
    js动态创建表格
    Codeforces 659G Fence Divercity dp
  • 原文地址:https://www.cnblogs.com/wintersong/p/5706111.html
Copyright © 2011-2022 走看看