半完成的头单链表

#pragma once

#include<stdio.h>
#include<stdlib.h>
typedef int SLTDateType;

typedef struct SListNode {
    SLTDateType data;
    struct SListNode* next;
}SLTNode;

void SListPrint(SLTNode* phead);//create一个头节点
void SListPushBack(SLTNode** phead, SLTDateType x);
void SListPushFront(SLTNode** phead, SLTDateType x);
void SListPopBack(SLTNode** phead);
void SListPopFront(SLTNode** phead);
SLTNode* SListFind(SLTNode* phead, SLTDateType x);
//在pos 之前插入一个节点
void SListInsert(SLTNode** phead, SLTNode* pos, SLTDateType x);
void SListEsrae(SLTNode** phead, SLTNode* pos);
void SListDestory(SLTNode** phead);

#include"SList.h"
#include<assert.h>
SLTNode* BuyListNode(SLTDateType x) {
    SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
    if (newnode == NULL) {
        printf("over");
        exit(-1);
    }
    newnode->data = x;
    newnode->next = NULL;
    return newnode;
}
void SListPrint(SLTNode* phead) {
    SLTNode* cur = phead;
    while (cur != NULL) {
        printf("%d->", cur->data);
        cur = cur -> next;
    }
    printf("NULL\n");
}
void SListPushBack(SLTNode** phead, SLTDateType x) {
    /*SLTNode* tail = phead;
    while (tail->next != NULL) {
        tail = tail->next;
    }*/
    /*SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
    newnode->data = x;
    newnode->next = NULL;*/
    SLTNode* newnode = BuyListNode(x);
    if (*phead == NULL) {//如果头为空就没办法玩了
        *phead = newnode;
    }
    else {
        
        SLTNode* tail = *phead;
        while (tail->next != NULL) {
    
            tail = tail->next;
        }
        tail->next = newnode;
    }
    
}//头插
void SListPushFront(SLTNode** phead, SLTDateType x) {
    SLTNode* newnode = BuyListNode(x);
    newnode->next = *phead;//plist在外部只能用phead
    *phead = newnode;
}

void SListPopBack(SLTNode** phead) {//尾删tail  ,头节点phead为NULL就没办法玩了
    assert(*phead != NULL);//头节点可能也是空的
    if ((*phead)->next == NULL) {
        free(*phead);
        *phead = NULL;
    }
    else
    {
        SLTNode* prv = NULL;
        SLTNode* tail = *phead;
        while (tail->next != NULL) {
            prv = tail;
            tail = tail->next;
        }
        free(tail);
        tail = NULL;
        prv->next = NULL;

    }
}
void SListPopFront(SLTNode** phead) {
    assert(*phead);
    SLTNode* next = (*phead)->next;
    free(*phead);
    *phead = next;
}
SLTNode* SListFind(SLTNode* phead, SLTDateType x) {
    SLTNode* cur = phead;
    while (cur) {
        if (cur->data == x) {
            return cur;
        }
        else {
            cur = cur->next;
        }
    }
    return NULL;
}
//在pos 之前插入一个节点
void SListInsert(SLTNode** phead, SLTNode*pos, SLTDateType x){
    SLTNode* newnode = BuyListNode(x);
    找到pos前一个位置
    //SLTNode* posPrev = *phead;
    //while (posPrev->next != pos) {
    //    posPrev = posPrev->next;//不懂就画图,自己就会明白的
    //}
    //posPrev->next = newnode;
    //newnode->next = pos;

    if (*phead == pos) {
        newnode->next = *phead;//不要写反了
        *phead = newnode;
    }
    else {
        //newnode->next = *phead;
        //*phead = newnode;
        SLTNode* posPrev = *phead;
        while (posPrev->next != pos) {
            posPrev = posPrev->next;//不懂就画图,自己就会明白的
        }
        posPrev->next = newnode;
        newnode->next = pos;
    }
}
void SListEsrae(SLTNode** phead, SLTNode* pos) {//删除
    if (*phead == pos) {
        void SListPopFront(phead);
    }
    else {
        SLTNode* prev = *phead;
        while (prev->next != pos) {
            prev = prev->next;
        }
        prev->next = pos->next;
        free(pos);
    }
}
void SListDestory(SLTNode** phead) {

}

#include"SList.h"
void Test() {
    SLTNode* plist = NULL;//外部plist头指针对接**plist
     SListPushBack(&plist,1);
     SListPushBack(&plist, 2);
     SListPushBack(&plist, 3);
     SListPushBack(&plist, 4);

     SListPrint(plist);

     SListPushFront(&plist,1);
     SListPushFront(&plist, 2);
     SListPushFront(&plist, 3);
     SListPushFront(&plist, 4);
     
     SListPrint(plist);
}
void test() {
    SLTNode* plist = NULL;

    SListPushFront(&plist, 1);
    SListPushFront(&plist, 2);
    SListPushFront(&plist, 3);
    SListPushFront(&plist, 4);

    SListPrint(plist);

    SListPopBack(&plist);
    SListPrint(plist);

    
}
void test3() {
    SLTNode* plist = NULL;

    SListPushFront(&plist, 1);
    SListPushFront(&plist, 2);
    SListPushFront(&plist, 3);
    SListPushFront(&plist, 4);

    SListPrint(plist);

    SListPopFront(&plist);
    SListPrint(plist);
    SListPopFront(&plist);
    SListPrint(plist);
    SListPopFront(&plist);
    SListPrint(plist);
}
void test4() {
    SLTNode* plist = NULL;

    SListPushFront(&plist, 1);
    SListPushFront(&plist, 2);
    SListPushFront(&plist, 3);
    SListPushFront(&plist, 4);

    SListPushFront(&plist, 2);
    SListPushFront(&plist, 3);
    SListPushFront(&plist, 4);

    SLTNode* pos1 = SListFind(plist, 2);
    if (pos1==NULL) {
        return 0;
    }
    else {
        int i = 0;
        while (pos1) {
            printf("%d pos节点:%p->%d\n", i++, pos1, pos1->data);
            pos1 = SListFind(pos1->next, 2);
        }
    }
    /*SLTNode* pos1 = SListFind(plist, 2);
    int i = 1;
    while (pos1) {
        printf("%d pos节点:%p->%d\n", i++, pos1, pos1->data);
        pos1 = SListFind(pos1->next, 2);
    }*/
}
int main() {
    //Test();
    //test();
    //test3();
    test4();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值