caxas 2022-09-25 22:30 采纳率: 83.3%
浏览 65
已结题

我刚学数据结构,基础不行,上学期的c语言也挂了,求大火看看

需求:给定的线性表为 L= (24,25, 7, 42, 19, 38)。

  1. 实现初始化并建立单链表【前插法或者后插法】
  2. 实现单链表的取值:取第5个元素的值。
  3. 实现单链表的插入:依次插入3,21,15 三个数.分别插入在第 4 ,6和2 位置。每插入一次都要输出一次单链表。
  4. 实现单链表的按值查找:输出 38 存储地址。
  5. 删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。。
  • 写回答

5条回答 默认 最新

  • qzjhjxj 2022-09-26 12:57
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #define ERROR 0
    #define OK    1
    typedef int Status;
    typedef int ElemType;
    typedef struct _node {
        ElemType   data;
        struct _node* next;
    }Node, * LinkList;
    
    Status CreateList_T(LinkList& L, int i, ElemType a[])//尾插法建立链表
    {
        int k;
        LinkList pL = NULL, tail = NULL;
        if (!L) {
            L = (LinkList)malloc(sizeof(Node));
            if (!L) {
                return ERROR;
            }
            L->next = NULL;
        }
        for (pL = L, k = 0; k < i; k++) {
            tail = (Node*)malloc(sizeof(Node));
            tail->next = NULL;
            tail->data = a[k];
            pL->next = tail;
            pL = tail;
        }
        return OK;
    }
    
    //实现单链表按位置取元素值
    Status GetElem(LinkList L, int i, ElemType& e)
    {
        int j = 0;
        LinkList p = L;
        if (!L || i < 1) {
            e = -999;
            return ERROR;
        }
        while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
            p = p->next;
            j++;
        }
        if (!(p->next) || j > i - 1) { e = -999; return ERROR; }
        e = p->next->data;
        return OK;
    }
    
    Status ListInsert(LinkList L, int i, ElemType e)
    {
        int j = 0;
        LinkList p = L, pt = NULL;
        if (!L || i < 1) 
            return ERROR;
        while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
            p = p->next;
            j++;
        }
        if (!(p->next) || j > i - 1) return ERROR;
        pt = (Node*)malloc(sizeof(Node));
        pt->data = e;
        pt->next = NULL;
        pt->next = p->next;
        p->next = pt;
        return OK;
    }
    
    //实现单链表按值查找,返回存储地址
    Node* LocateElem(LinkList L, ElemType e)
    {
        LinkList p = L;
        if (!L)
            return NULL;
        while (p->next && p->next->data != e) { //寻找第i个结点,并令p指向其前趋结点
            p = p->next;
        }
        if (!p->next) return NULL;
        return p->next;
    }
    
    //在带头结点的单链表 L中,删除第 i 个元素,并由e返回其值
    Status ListDelete_L(LinkList L, int i, ElemType& e)
    {
        int j = 0;
        LinkList p = L, q = NULL;
        if (!L || i < 1) {
            e = -999;
            return ERROR;
        }
        while (p->next && j < i - 1) { //寻找第i个结点,并令p指向其前趋结点
            p = p->next;
            j++;
        }
        if (!(p->next) || j > i - 1) { e = -999; return ERROR; }
        q = p->next;
        p->next = q->next;
        e = q->data;
        free(q);
        return OK;
    }
    
    void printList(LinkList L)
    {
        LinkList p = L;
        if (!L || !L->next) {
            printf("NULL");
        }
        else {
            while (p->next) {
                printf(p->next == L->next ? "%d" : " %d", p->next->data);
                p = p->next;
            }
        }
        printf("\n");
    }
    
    int main()
    {
        LinkList L = NULL, pt = NULL;
        ElemType a[6] = { 24,25,7,42,19,38 }, e;
        CreateList_T(L, 6, a);
        printList(L);
    
        GetElem(L, 5, e);//单链表按位置取元素值
        printf("第%d个元素值为:%d\n", 5, e);
    
        ListInsert(L, 4, 3);//在第4位置上插入数值3
        printList(L);
        ListInsert(L, 6, 21);//在第6位置上插入数值21
        printList(L);
        ListInsert(L, 2, 15);//在第2位置上插入数值15
        printList(L);
    
        pt = LocateElem(L, 38);//单链表的按值查找:输出 38 存储地址
        if (pt)
            printf("pt:%p,pt->data=%d\n", pt, pt->data);
        else
            printf("pt:%p\n", pt);
    
        ListDelete_L(L, 5, e);//删除第5个位置上的元素
        printList(L);
        ListDelete_L(L, 3, e);//删除第3个位置上的元素
        printList(L);
        ListDelete_L(L, 12, e);//删除第12个位置上的元素
        printList(L);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示