实验三单链表的基本操作

 

一、实验目的和要求

1)掌握使用CodeBlooks软件上机调试程序的基本方法;

2)掌握单链表的基本操作:初始化、插入、删除、定位数据元素等运算;

3)用C++语言定义描述单链表的结构体;

二、实验原理

单链表的基本操作:单链表结构体的定义,单链表操作:初始化、插入、删除、获得数据元素运算。

三、主要仪器设备或材料

PC机,Windows XP操作平台,CodeBlooks

四、实验方法和步骤

1、利用CodeBlooks新建C++项目

2、编写程序

#include "stdio.h"
#include "malloc.h"

typedef int DataType;
typedef struct  LNode {
    DataType      data;  // 数据域
    struct  LNode   *next;  // 指针域
} LNode, *LinkList;

//初始化算法描述
void initList(LinkList &L) {
    L = (LNode *)malloc(sizeof( LNode ) );
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL; //头结点为空
}

//单链表的查找(按位查找)
LNode *Locate(LinkList L, int i) {
    LNode *head;
    head = L;
    int count = 0;
    if (i <= 0) {
        printf("Locate函数执行,i值非法\n");
        return NULL;
    }
    while ( head->next != NULL ) {
        if (count < i) {
            count++;      //和++
            head = head->next;     //头结点的移动
        } else
            break;
    }
    if (i == count) {
        printf("\n函数执行,链表中的第%d个元素的值时%d,count=%d", i, head->data, count);
        return head;
    } else
        return NULL;
}

//单链表的查找(按值查找)
LNode *LocateKey(LinkList L, DataType key) {
    LNode *head;
    head = L;
    int count = 0;
    if (NULL == head) {
        printf("Locate函数执行,链表为空\n");
        return NULL;
    }
    while ( head->next != NULL && head->data != key) {
        count++;                  //和++
        head = head->next;                            //头结点的移动
    }
    if (head->data == key) {
        printf("\n函数执行,元素%d时链表中的第%d个元素\n", key, count);
        return head;
    } else
        printf("链表中没有找到元素%d", key);
    return NULL;
}

//单链表的插入
LinkList insertheadList (LinkList L, int i, DataType key) {
    LNode *p = L, *s;
    int j = 1;

    if (i <= 0) {
        printf("insertheadList函数执行,i值非法,插入失败\n");
        return NULL;
    }
//找到第i的位置
    while ((p->next != NULL) && (j < i)) {
        p = p->next;
        j++;
    }
    if (j != i) {

        printf("\n insertheadList函数执行,i值超过链表长度,插入失败\n");
        return NULL;
    } else {
        s = (LNode *)malloc(sizeof(LNode));
        s->data = key;            //赋值key
        s->next = p->next;
        p->next = s; //单链表的插入代码


        printf("\n insertheadList函数执行,在第%d个位置插入%d,插入成功\n", i, key);
    }
    return L;
}

//单链表的删除
LNode *DelLink(LinkList L, int i) {
    LNode *p, *q;
    int j = 1;
    p = L;
    if (i < 1) {
        printf("删除结点位置不合法,删除失败\n");
    }
    while ((p->next != NULL) && (j < i)) {
        p = p->next;
        j++;
    }
    if (j != i) {
        printf("\n DelLink函数执行,i值超过链表长度,插入失败\n");
        return L;
    } else {
        q = p->next;            //指针指向下一个结点
        p->next = q->next;    //删除代码
        printf("删除第%d个结点成功,删除的结点值是%d\n", i, q->data);
        free(q);    //释放
    }
    return L;
}

int main() {
    LinkList LL;
    initList(LL);
//单链表的插入
    LL = insertheadList(LL, 1, 11);        //在单链表LL第1个位置插入11
    LL = insertheadList(LL, 2, 12);            //在单链表LL第2个位置插入12
    LL = insertheadList(LL, 3, 13);            //在单链表LL第3个位置插入13
    LL = insertheadList(LL, 4, 14);        //在单链表LL第4个位置插入14
    LL = insertheadList(LL, 5, 15);        //在单链表LL第5个位置插入15
    LNode *p = Locate(LL, 2);
    p = LocateKey(LL, 13);
    LL = DelLink(LL, 2);
    Locate(LL, 2);
    return 1;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值