线性链表

Posted 让自己不再小小的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性链表相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<queue>
#include<vector>
#include<algorithm>
#define N 1001000
#define INf 0X3f3f3f3f
using namespace std;
typedef long long LL;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;

typedef struct node
{
    ElemType data;
    struct node *next;
} LNode, *LinkList;
int m=sizeof(LNode);

Status GetElem_L(LinkList L, int i, ElemType &e)
{
    LinkList p=L->next;
    int j=1;
    while(j<i&&p)
    {
        p=p->next;
        j++;
    }
    if(!p)
        return ERROR;
    e=p->data;
    return OK;
}

void TravelList_L(LinkList L)
{
    LinkList p=L->next;

    while(p)
    {
        printf("%d ", p->data);
        p=p->next;
    }
}

void CreateList_L(LinkList &L, int n)
{
    L=(LinkList)malloc(m);
    L->next=NULL;
    for(int i=0; i<n; i++)
    {
        LinkList p=(LinkList)malloc(m);
        scanf("%d", &(p->data));
        p->next=L->next;
        L->next=p;
    }
}

Status InsertList_L(LinkList &L, int i, ElemType e)
{
    printf("请按所给思路实现单链表插入运算!\n");
    LinkList s, p=L;
    int j=0;

    while(!p&&j!=i-1)
    {
        p=p->next;
        j++;
    }

    if(!p || i<1)
        return ERROR;

    s=(LinkList)malloc(m);
    s->data=e;
    s->next=p->next;
    p->next=s;

    return OK;
}

Status DeleteList_L(LinkList &L, int i, int &e)
{
    printf("请按所给思路实现单链表删除运算!\n");
    LinkList p=L, q;
    int j=0;

    while(p&&j!=i-1)
    {
        p=p->next;
        j++;
    }
    if(!p || i<1)
        return ERROR;
    q=p->next;
    e=q->data;
    p->next=q->next;
    free(q);
    return OK;
}

int main()
{
    LinkList L1;
    int n;
    ElemType x;
    printf("请输一个整数:");
    scanf("%d", &n);
    printf("\n尾插法建单链表,请输入%d个整数:\n", n);
    CreateList_L(L1, n);
    printf("尾插法建单链表成功!,单链表中的数据是:\n");
    TravelList_L(L1);
    printf("\n");
    printf("在第一个结点位置插入元素15:\n");
    InsertList_L(L1, 1, 15);
    printf("插入后,链表中数据为:\n");    TravelList_L(L1);
    printf("\n");

    if(DeleteList_L(L1, 3, x))
    {
        printf("\n删除第三个元素成功!被删除元素是:%d\n删除后单链表中数据是\n", x);
        TravelList_L(L1);
        printf("\n");
    }
    else
        printf("\n删除元素失败\n");
    return 0;
}

 

以上是关于线性链表的主要内容,如果未能解决你的问题,请参考以下文章

线性表——顺序表和链表

带头结点的线性链表代码

C中线性表和链表的区别

Java数据结构线性表之链表

Java数据结构线性表之链表

Java数据结构线性表之链表