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 = (LNode)malloc(sizeof(LNode)); (*L)->next = NULL; }
// 建表 void CreateLinkList(LinkList L) { LNode s; int x; printf('请输入数据(输入0结束):\n'); scanf('%d', &x); while(x != 0) { s = (LNode)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf('%d', &x); } }
// 求表长 int LengthLinkList(LinkList L) { LNode *p = L->next; int j = 0; while(p != NULL) { p = p->next; j++; } return j; }
// 输出链表 void ShowLinkList(LinkList L) { LNode *p = L->next; while(p != NULL) { printf('%d ', p->data); p = p->next; } printf('\n'); }
// 插入节点 int InsertLinkList(LinkList L, int i, int e) { LNode *p = L, s; int j = 0; while(p != NULL && j < i - 1) { p = p->next; j++; } if(p == NULL || j > i - 1) { printf('插入位置不合法!\n'); return 0; } s = (LNode)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return 1; }
// 删除节点 int DeleteLinkList(LinkList L, int i) { LNode *p = L, *q; int j = 0; while(p->next != NULL && j < i - 1) { p = p->next; j++; } if(p->next == NULL || j > i - 1) { printf('删除位置不合法!\n'); return 0; } q = p->next; p->next = q->next; free(q); return 1; }
// 查找元素 int LocateLinkList(LinkList L, int e) { LNode *p = L->next; int i = 1; while(p != NULL && p->data != e) { p = p->next; i++; } if(p == NULL) { return 0; } else { return i; } }
int main() { LinkList L; InitList(&L); CreateLinkList(L); printf('链表中的数据为:'); ShowLinkList(L); printf('链表的长度为:%d\n', LengthLinkList(L)); int i, e; printf('请输入插入的位置和元素:\n'); scanf('%d %d', &i, &e); if(InsertLinkList(L, i, e)) { printf('插入成功!\n'); printf('链表中的数据为:'); ShowLinkList(L); } printf('请输入删除的位置:\n'); scanf('%d', &i); if(DeleteLinkList(L, i)) { printf('删除成功!\n'); printf('链表中的数据为:'); ShowLinkList(L); } printf('请输入查找的元素:\n'); scanf('%d', &e); i = LocateLinkList(L, e); if(i) { printf('元素%d在链表中的位置为:%d\n', e, i); } else { printf('元素%d不在链表中!\n', e); } return 0;
原文地址: http://www.cveoy.top/t/topic/nstS 著作权归作者所有。请勿转载和采集!