单链表 增删改查 wip

Run Settings
LanguageC
Language Version
Run Command
// 定义一个单链表 struct LNode { ElemType data; struct LNode *next; } struct LNode *p = (struct LNode *)maclloc(sizeof(struct LNode)); typedef struct LNode LNode; LNode *p = (LNode *)malloc(sizeof(LNode)); bool InitList(LinkList &L) // 带头结点的单链表初始化 { L = (LNode *)malloc(sizeof(LNode)); // 创建头结点 L->next = null; // 头结点之后暂没有元素结点 return true; } bool InitList(LinkList &L) // 不带头结点的单链表初始化 { L = NULL; return true; } // 计算单链表中数据结点的个数 int Length(LinkList L) { int len = 0; LNode *p = L; while (p->next != NULL) { p = p->next; len++; } return len; } // 按序号查找结点 LNode *GetElem(LinkList L, int i) { LNode *p = L; int j = 0; // 记录当前结点的位序,头结点为第0个结点 while (p != NULL && j < i) // 循环找到第i个结点 { p = p->next; j++; } return p; // 返回第i个结点,或 NULL } // 按值查找结点 LNode *LocateElem(LinkList L, ElemType e) { LNode *p = L->next; while (p != = NULL &&p->data != = e) // 从第一个结点开始查找数据域为e的结点 { p = p->next; } return p; // 找到后返回该结点的指针,否则返回 NULL } // 插入结点 /** * 将值为x 的新结点插入到单链表的第i个位置。 * 先检查插入位置的合法性 * 然后找到待插入位置的前驱,即第i-1个结点 */ bool ListInsert(LinkList &L, int i, ElemType e) { LNode *p = L; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL) // i值不合法 return false; LNode *s = (LNode *)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return true; } // 删除结点 /** * 删除结点操作 * 将单链表的第i个结点删除 * 先检查删除位置的合法性 * 查找表中第i-1个结点,即被删除结点的前驱 * 再删除第i个结点 */ bool ListDelete(LinkList &L, int i, ElemType &e) { LNode *p = L; int j = 0; // 记录当前结点的位序 while (p != NULL && j < i - 1) // 循环找到第i-1个结点 { p = p->next; j++; } if (p == NULL || p->next == NULL) // i值不合法 return false; LNode *q = p->next; // 令q指向被删除结点 e = q->data; // 用e返回删除元素的值 p->next = q->next; // 将*q结点从链中断开 free(q); // 释放被删除的结点的存储空间 return true; }
Editor Settings
Theme
Key bindings
Full width
Lines