线性表之单链表

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值