线性链表

/**线性表的链式表示,创建,插入元素,删除元素,遍历,获得元素等操作。*/

#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("请按所给思路实现单链表插入运算!
");
    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("请按所给思路实现单链表删除运算!
");
    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("
尾插法建单链表,请输入%d个整数:
", n);
    CreateList_L(L1, n);
    printf("尾插法建单链表成功!,单链表中的数据是:
");
    TravelList_L(L1);
    printf("
");
    printf("在第一个结点位置插入元素15:
");
    InsertList_L(L1, 1, 15);
    printf("插入后,链表中数据为:
");
    TravelList_L(L1);
    printf("
");

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

/**修改后的版本 */

#include<cstdio>
#include<cstdlib>
typedef char ElemType;
typedef int Status;

typedef struct node
{
    ElemType data;
    struct node *next;
} LNode, *LinkList;

void CreatList_L(LinkList L, int n)
{
    LinkList rear, p;
    rear=L;

    for(int i=0; i<n; i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf(" %c", &(p->data));
        rear->next=p;
        rear=p;
    }
    rear->next=NULL;
}

void InsertList_L(LinkList L, int i, int e)
{
    LinkList p, pre;
    pre=L;
    int j=0;

    while(pre && j<i-1)
    {
        pre=pre->next;
        j++;
    }
    if(!pre || i<1)
    {
        printf("i值错误
");
        return ;
    }

    p=(LinkList)malloc(sizeof(LNode));
    p->data=e;
    p->next=pre->next;
    pre->next=p;
}

void DeleteList_L(LinkList L, int i, char *e)
{
    LinkList p, pre;
    int j=0;
    pre=L;

    while(pre && j<i-1)
    {
        pre=pre->next;
        j++;
    }

    if(!pre || i<1)
    {
        printf("i值错误
");
        return ;
    }

    p=pre->next;
    pre->next=p->next;
    *e=p->data;
    free(p);
}

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

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

int main()
{
    int n, index;
    ElemType e;
    printf("请要输入字母的数量:");
    scanf("%d", &n);
    printf("请输入%d个小写的英文字母:", n);
    LinkList L1;
    L1=(LinkList)malloc(sizeof(LNode));
    CreatList_L(L1, n);///创建操作
    printf("输出链表中的元素:");
    PrintList_L(L1);
    printf("
输入插入元素的位置和该元素:");
    scanf("%d %c", &index, &e);
    InsertList_L(L1, index, e);///插入操作
    printf("输出链表中的元素:");
    PrintList_L(L1);
    printf("
输入删除元素的位置:");
    scanf("%d", &index);
    DeleteList_L(L1, index, &e);///删除操作
    printf("输出链表中的元素:");
    PrintList_L(L1);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/9968jie/p/5889647.html