大一下c++笔记

大一下c++笔记,第1张

第一章    单链表--结构体指针

typedef  struct  Node {
    int  elem;    //  代表数据域
    struct  Node* next;    //  代表指针域,指向直接后继元素
}  Linklist;

Linklist* initLink() {
    Linklist* head = (Linklist*)malloc(sizeof(Linklist));
    head->next = NULL;
    return head;
}

单链表的初始化:定义一个Linklist结构体,创建数据域和指针域。之后初始化头尾结点,将头节点的下一个赋成空。

以下为单链表中各种功能函数:

bool isEmpty(Linklist* head) {   //判断链表是否为空
    if (head->next == NULL)
        return true;
    else
        return false;
}
int getLen(Linklist* head) {      //用循环获取链表的长度
    int count = 0;
    Linklist* temp = head;
    while (temp->next != NULL) {
        temp = temp->next;
        count++;
    }
    return count;
}
void addNode(Linklist* head, int elem) {        //在链表末尾添加结点,值为elem
    Linklist* p = (Linklist*)malloc(sizeof(Linklist));  //创建一个新指针p
    p->elem = elem;   //p的值为elem
    p->next = NULL;
    Linklist* temp = head;
    while (temp->next != NULL) {
        temp = temp->next;
    }
    temp->next = p;  //把p链入链表
}


void insert(Linklist* head, int i , int elem) {    //在链表中间位置i处添加结点,值为elem
    Linklist* p = (Linklist*)malloc(sizeof(Linklist));
    p->elem = elem;
    int count = 0;
    Linklist* temp = head;
    while (temp->next!=NULL && count < i - 1) {
        temp = temp->next;
        count++;
    }
    p->next = temp->next;
    temp->next = p;
}
void delNode(Linklist* head, int i) {   //删除链表第i个结点
    int count = 0;
    Linklist* temp = head;
    while (count < i-1) {
        temp = temp->next;
        count++;
    }
    temp->next = temp->next->next;
}
void updateNode(Linklist* head, int i, int elem) {  //修改链表第i个值为elem
    Linklist* p = (Linklist*)malloc(sizeof(Linklist));
    p->elem = elem;
    int count = 0;
    Linklist* temp = head;
    while (count < i-1) {
        temp = temp->next;
        count++;
    }
    p->next = temp->next->next;   //前后都要挂上p
    temp->next = p;
}
int getElem(Linklist* head, int i) {   //获取链表第i个结点的值
    int count = 0; 
    Linklist* temp = head;
    while (count < i-1) {
        temp = temp->next;
        count++;
    }
    return temp->next->elem;   //取值表示:temp->elem
}
int getIndex(Linklist* head, int elem) {    //查找:若elem是第i个元素 则返回elem 否则返回0
    int num = 0;
    Linklist* temp1 = head;
    while (temp1->next != NULL) {
        temp1 = temp1->next;
        num++;
    }
    Linklist* p = (Linklist*)malloc(sizeof(Linklist));
    p->elem = elem;
    int count = 0;
    Linklist* temp = head;
    while (temp->next != NULL) {
        if (temp->elem != p->elem) {
            temp = temp->next;
            count++;
        }
        if (count < num) {
            if (temp->elem == p->elem)
                return count;
        }
        else
            return 0;
    }
}
void printLinklist(Linklist* head) {  //顺序打印链表每个元素的值
    while (head->next != NULL) {
        cout << head->next->elem<<" ";
        head = head->next;
    }
}

 关于单链表相关知识:

线性表由同类数据元素组成由有限个数据元素组成相邻元素之间存在着序偶关系 i , a i+1 >线性表是一种简单的数据结构:数据元素之间是由 一前驱一后继 的直观有序的关系确定。线性表是一种最常见的数据结构:矩阵、数组、字符串、堆栈、队列等都符合线性条件。

 

 

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

原文地址: http://outofmemory.cn/langs/707353.html

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

发表评论

登录后才能评论

评论列表(0条)

保存