C语言单链表实现:增删查改功能详解及代码示例
#include<stdio.h> #include<stdlib.h>
#define MAXSIZE 100 // 定义常量,表示链表的最大长度
typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList;
// 初始化链表 void InitList(LinkList *L) { *L = NULL; // 头指针指向空 }
// 建表 void CreateLinkList(LinkList *L) { LNode *s, r = NULL; // r表示链表的尾节点 int x; printf('请输入数据(以-1结束): '); while(1) { scanf('%d', &x); if(x == -1) break; s = (LNode)malloc(sizeof(LNode)); s->data = x; s->next = NULL; if(*L == NULL) // 链表为空,新节点为第一个节点 *L = s; else // 链表不为空,将新节点加到链表尾部 r->next = s; r = s; // 更新链表尾节点 } }
// 求链表长度 int LengthLinkList(LinkList L) { LNode *p = L; int len = 0; while(p) { len++; p = p->next; } return len; }
// 输出链表数据 void ShowList(LinkList L) { LNode *p = L; while(p) { printf('%d ', p->data); p = p->next; } printf(' '); }
// 在链表第i个位置插入元素 int InsertLinkList(LinkList *L, int i, int e) { LNode *p = *L, s; int j = 0; while(p && j < i - 1) // 查找第i-1个节点 { p = p->next; j++; } if(!p || j > i - 1) // 插入位置不合理 return 0; s = (LNode)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return 1; }
// 删除链表第i个节点 int DeleteLinkList(LinkList *L, int i) { LNode *p = *L, *q; int j = 0; while(p->next && j < i - 1) // 查找第i-1个节点 { p = p->next; j++; } if(!p->next || j > i - 1) // 删除位置不合理 return 0; q = p->next; p->next = q->next; free(q); return 1; }
// 查找元素e在链表中的位置 int LocateLinkList(LinkList L, int e) { LNode *p = L; int i = 0; while(p) // 遍历链表 { i++; if(p->data == e) return i; p = p->next; } return 0; }
int main() { LinkList L; InitList(&L); CreateLinkList(&L); printf('链表数据为: '); ShowList(L); printf('链表长度为:%d ', LengthLinkList(L)); int i, e; printf('请输入要插入的位置和数据: '); scanf('%d%d', &i, &e); if(InsertLinkList(&L, i, e)) printf('插入成功! '); else printf('插入失败! '); printf('插入后的链表数据为: '); ShowList(L); printf('请输入要查找的数据: '); scanf('%d', &e); i = LocateLinkList(L, e); if(i) printf('元素%d在链表中的位置为:%d ', e, i); else printf('元素%d不在链表中! ', e); printf('请输入要删除的位置: '); scanf('%d', &i); if(DeleteLinkList(&L, i)) printf('删除成功! '); else printf('删除失败! '); printf('删除后的链表数据为: '); ShowList(L); return 0;
原文地址: http://www.cveoy.top/t/topic/nst0 著作权归作者所有。请勿转载和采集!