【数据结构实验二】单链表的基本 *** 作(动态链表)

【数据结构实验二】单链表的基本 *** 作(动态链表),第1张

输入格式:

第1行,输入若干个用头插法构成单链表 L1 的元素,使用-1结束,例如:1 3 5 7 9 -1

第2行,输入若干个用尾插法构成单链表 L2 的元素,使用-1结束,例如:2 4 6 8 10 -1

第3行,分别输入在第一个单链表 L1 中插入的元素 66 和位置 5,在第二个单链表 L2 中查找的元素 8 和删除元素的位置 1,用空格隔开。例如:66 5 8 1

输出格式:

参照主函数及输出样例。

测试数据在1~99之间,输出格式使用%3d

输入样例:
1 3 5 7 9 -1
2 4 6 8 10 -1
66 5 8 1
输出样例:
头插法创建单链表L1...
  9  7  5  3  1
单链表L1的长度为:5
尾插法创建单链表L2...
  2  4  6  8 10
单链表L2的长度为:5
在单链表L1中第5个位置插入元素66...
  9  7  5  3 66  1
删除单链表L2中第1个位置的元素...
  4  6  8 10
删除的元素是:2
在单链表L1中查找元素...
单链表L1中第5个元素的值为:66
在单链表L2中查找元素的位置...
单链表L2中元素8的位置为:3
#include 
#include 
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;

void InitList_L(LinkList &PHead);
void InsertList_L(LinkList &L, int i, ElemType e);
void DeleteList_L(LinkList &L, int i, ElemType &e);
void CreatListFromHead_L(LinkList &PHead);
void CreatListFromTail_L(LinkList &PHead);
void PrintList_L(LinkList &L); //已知
bool IsEmptyList_L(LinkList &L); //已知
void GetElemList_L(LinkList &L, int i, ElemType &e);
int LocateElemList_L(LinkList &L, ElemType e); //已知
int LengthList_L(LinkList &L); //已知
void FreeList_L(LinkList &L); //已知

int main()
{
    LinkList L1, L2;
    ElemType e, data;
    int index, n;
    InitList_L(L1);
    InitList_L(L2);
    CreatListFromHead_L(L1);
    CreatListFromTail_L(L2);
    scanf("%d %d %d %d", &e, &index, &data, &n);
    printf("头插法创建单链表L1...\n");
    PrintList_L(L1);
    printf("单链表L1的长度为:%d\n", LengthList_L(L1));
    printf("尾插法创建单链表L2...\n");
    PrintList_L(L2);
    printf("单链表L2的长度为:%d\n", LengthList_L(L2));

    printf("在单链表L1中第%d个位置插入元素%d...\n", index, e);
    InsertList_L(L1, index, e);
    PrintList_L(L1);

    printf("删除单链表L2中第%d个位置的元素...\n", n);
    DeleteList_L(L2, n, e);
    PrintList_L(L2);
    printf("删除的元素是:%d\n", e);

    printf("在单链表L1中查找元素...\n");
    GetElemList_L(L1, index, e);
    printf("单链表L1中第%d个元素的值为:%d\n", index, e);

    printf("在单链表L2中查找元素的位置...\n");
    printf("单链表L2中元素%d的位置为:%d", data, LocateElemList_L(L2, data));

    return 0;
}

void PrintList_L(LinkList &L)
{
    LinkList p = L->next;
    //printf("单链表:");
    while(p)
    {
        printf("%3d", p->data);
        p = p->next;
    }
    printf("\n");
    return;
}

bool IsEmptyList_L(LinkList &L)
{
    return L->next == NULL;
}

int LocateElemList_L(LinkList &L, ElemType  e)
{
    LinkList p = L->next;
    int j = 1;
    while(p && p->data != e)
    {
        p = p->next;
        j++;
    }
    if(p) return j;
    else return -1;
}

int LengthList_L(LinkList &L)
{
    LinkList p = L;
    int len = 0;
    while(p->next != NULL)
    {
        len++;
        p = p->next;
    }
    return len;
}

void FreeList_L(LinkList &L)
{
    LinkList p = L, q;
    while(p->next != NULL)
    {
        q = p;
        p = p->next;
        free(q);
    }
        free(p);
    return;
}

void InitList_L(LinkList &PHead)
{
    PHead = (LinkList)malloc(sizeof(LNode));
    if(!PHead) return;
    PHead->next = NULL;
}

void InsertList_L(LinkList &L, int i, ElemType e)
{
    LinkList p;
    p = L;
    int j=1;

    while( p && jnext;
        j++;
    }
    if(!p||j>i) 
    {
        printf("插入的位置不合法!\n");
        return;
    }

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

void DeleteList_L(LinkList &L, int i, ElemType &e)
{
    LinkList p,q;
    p = L;
    int j=1;

    while( p->next && jnext;
        j++;
    }
    if(!(p->next)||j>i) 
    {
        printf("删除元素的位置不合法!\n");
        e=-1;
        return;
    }

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

void CreatListFromHead_L(LinkList &PHead)
{
    ElemType e;

    scanf("%d",&e);
    while(e!=-1)
    {
        LinkList s=(LinkList)malloc(sizeof(LNode));
        s->data = e;
        s->next = NULL;
        s->next = PHead->next;
        PHead->next = s;
        scanf("%d",&e);
    }
}

void CreatListFromTail_L(LinkList &PHead)
{
    LinkList p;
    ElemType e;
    p = PHead;

    scanf("%d",&e);
    while(e!=-1)
    {
        LinkList s=(LinkList)malloc(sizeof(LNode));
        s->data = e;
        s->next = NULL;
        p->next = s;
        p = s;
        scanf("%d",&e);
    }
}

void GetElemList_L(LinkList &L, int i, ElemType &e)
{
    LinkList p;
    p = L;
    int j=1;

    while(p&&jnext;
        j++;
    }
    if(!p||j>i) 
    {
        printf("第%d个元素不存在!\n",i);
        e=-1;
        return;
    }
    e = p->next->data;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/722918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)