链表的定义和运算(数据结构)实验

实验要求:

1.单链表的存储结构定义。

2.从键盘上依次输入21、18、30、75、42、56,逆序创建单链表(前插法),并输出单链表中的各元素值。

3.分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。

4.删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。

 

代码实现:

  

#include <stdio.h>

#include <iostream>

#include <stdlib.h>

using namespace std;

#define Erro 0;

//定义链表结构

typedef struct Node {

    int data;

    Node* next;

}Node,*Linklist;

//创建单链表的函数

void creatList(Linklist &L,int m) {

    //链表的初始化

    L = (Node*)malloc(sizeof(Node));

    L->next = NULL;

    cout << "请输入元素" << " ";

    for (int i = 0; i < m; i++) {

        Node* s = (Node*)malloc(sizeof(Node));//创建一个新的节点s

        cin >> s->data;//往新节点s输入元素

        //将新结点插入到头节点之后

        s->next = L->next;

        L->next = s;

    }

}

//输出链表的函数

void printList(Linklist L) {

    Node* p = L->next;//指向指针域

    while (p != NULL) {

        printf("%d ", p->data);

        p = p->next;

    }

    printf("\n");

}

//链表的插入

int insertList(Linklist *L,int e,int y) {//在e位置插入y

    Node* p = *L;

    int i = 0;

    // 找到第e-1个节点

    while (p && i < e - 1) {

        p = p->next;

        i++;

    }

    if (!p || i > e - 1)

        return 0;

    Node* newNode = (Node*)malloc(sizeof(Node));

    newNode->data= y;

    newNode->next = p->next;

    p->next = newNode;

    return 1;

}

//链表的删除

int deleteList(Linklist&L,int e) {//e节点删除

    Node* p = L;

    int i = 0;

    while (p && i < e - 1) {

        p = p->next;

        i++;

    }

    if (!p || (i> e - 1)) {//下一个结点不存在或者e<1

        return 0;

    }

    Node* q;

    q= p->next;

    p->next = q->next;

    delete q;

    return 1;

}

int main() {

    int n;

    Linklist L;

    cout << "请输入元素个数:" << endl;

    cin >> n;

    creatList(L, n);

    cout << "链表中的元素(前插法):";

    printList(L);

    cout << "请输入插入元素的位置:";

    int j,k;

    cout << endl;

    cin >> j;

    cout << "插入的元素:";

    cin >> k;

    if (insertList(&L, j, k)) {

        cout << "插入成功,此时链表元素为:";

        printList(L);

    }

    else {

        cout << "插入失败,此时链表为:";

        printList(L);

        cout << endl;

    }

    cout << "请输入插入元素的位置:";

    int num1, num2;

    cout << endl;

    cin >> num1;

    cout << "插入的元素:";

    cin >> num2;

    if (insertList(&L, num1, num2)) {

        cout << "插入成功,此时链表元素为:"; printList(L);

    }

    else {

        cout << "插入失败,此时链表元素为:";

        printList(L);

        cout << endl;

    }

    cout << "要删除第几个数据元素:";

    int del1,del2;

    cin >> del1;

    if (deleteList(L, del1)) {

        cout << "删除成功,此时链表元素为:";

        printList(L);

    }

    else {

        cout << "插入失败" << endl;

        }

    cout << "要删除第几个数据元素:";

    cin >> del2;

    if (deleteList(L, del2)) {

        cout << "删除成功,此时链表元素为:";

        printList(L);

    }

    else {

        cout << "插入失败,此时链表元素为:";

        printList(L);

    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值