zoukankan      html  css  js  c++  java
  • 线性表之单链表

    #include  "stdafx.h"
    #include<iostream>
    using namespace std;
    #include<malloc.h>
    #define OK               1        //正确
    #define ERROR            0        //失败
    typedef int ElementType;
    
    typedef  struct LNode{                //定义结构体    
        ElementType data;
        LNode *next;
    }LNode,*LinkList;
    
    //初始化单链表
    void init(LinkList &L,int n)
    {
        if(n<0) return ;
        L = (LinkList) malloc(sizeof(LNode));
        L->next=NULL;//创建头指针
        int data;
        LinkList node;
        for(int i=0;i<n;i++)
        {
            cin>>data;
            node = (LinkList) malloc(sizeof(LNode));//创建LNode的节点
            node->data=data;
            node->next=L->next;
            L->next=node;
        }
    }
    //获取单链表第i个位置的元素e
    int getElement(LinkList &L,int i,ElementType &e)
    {
        LNode *p;
        int j=1;
        p=L->next;
        while(p && j<i)
        {
            p=p->next;
            ++j;
        }
        if(!p || j>i)
        {
            cout<<"没有找到位置序号"+i;
            return ERROR;
        }
        e=p->data;
        cout<<"单链表第"<<i<<"个位置的元素是:"<<e;
        return OK;
    }
    //删除单链表的第i个位置的元素
    void insert(LinkList &L,int i,ElementType &e)
    {
        LNode *p;
        int j=1;
        LinkList node;
        p=L;
        while(p && j<i)    //寻找第i-1个节点
        {
            p=p->next;
            ++j;
        }
        if(!p || j>i)
        {
            cout<<"插入的位置已经超出边界"<<endl;
            return;
        }
        node = (LinkList) malloc(sizeof(LNode));//创建LNode的节点
        node->data=e;
        node->next = p->next;
        p->next = node;
    }
    //向单链表的第i个位置插入元素e
    void delLink(LinkList &L,int i,ElementType &e)
    {
        LNode *p,*q;
        int j=1;
        LinkList node;
        p=L;
        while(p->next && j<i)    //寻找第i节点,也可以寻找第i-1个节点
        {
            p=p->next;
            ++j;
        }
        if(!(p->next)|| j>i)
        {
            cout<<"删除的位置不对"<<endl;
            return;
        }
        q=p->next;
        p->next=q->next;
        e=q->data;
        free(q);
    }
    //打印单链表的数据
    void print(LinkList &L)
    {
        LNode *p;
        p=L->next;
        while(p)
        {
            cout<<p->data<<"    ";
            p=p->next;
        }
    }
    int main(int argc,char* argv[]){
        LinkList L;
        ElementType e;
        int n;
        cout<<"请输入需要创建的链表长度: "<<endl;
        cin>>n;
        cout<<"请输入"<<n<<"个数据: ";
        init(L,n);
        cout<<"创建的链表为: ";
        print(L);
        cout<<endl;
    
        cout<<"请输入需要获取链表那个位置的元素: ";
        cin>>n;
        getElement(L,n,e);
    
        cout<<"请输入要插入元素的位置和数据: ";
        cin>>n;
        cin>>e;
        cout<<"插入后的单链表为:"<<endl;
        insert(L,n,e);
        print(L);
        
        cout<<"请输入要删除元素的位置: ";
        cin>>n;
        delLink(L,n,e);
        cout<<"删除后的单链表为:"<<endl;
        print(L);
        
        print(L);
        cin>>n;
        return OK;
    }
  • 相关阅读:
    在linux上搭建sftp服务
    FTP客户端遇到150连接超时错误的处理办法
    电脑每次开机打开微软网站怎么解决
    Linux学习笔记之认识与学习Bash
    Linux学习笔记之VIM编辑器
    Linux学习笔记之文件与文件系统的压缩与打包
    Linux学习笔记之磁盘与文件系统的管理
    Linux学习笔记之目录配置
    Linux学习笔记之档案权限与目录配置
    ubuntu修改apt源
  • 原文地址:https://www.cnblogs.com/lbangel/p/3288664.html
Copyright © 2011-2022 走看看