优化后的代码如下:

#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结束):\n"); 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("\n"); }

// 在链表第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("链表数据为:\n"); ShowList(L); printf("链表长度为:%d\n", LengthLinkList(L)); int i, e; printf("请输入要插入的位置和数据:\n"); scanf("%d%d", &i, &e); if(InsertLinkList(&L, i, e)) printf("插入成功!\n"); else printf("插入失败!\n"); printf("插入后的链表数据为:\n"); ShowList(L); printf("请输入要查找的数据:\n"); scanf("%d", &e); i = LocateLinkList(L, e); if(i) printf("元素%d在链表中的位置为:%d\n", e, i); else printf("元素%d不在链表中!\n", e); printf("请输入要删除的位置:\n"); scanf("%d", &i); if(DeleteLinkList(&L, i)) printf("删除成功!\n"); else printf("删除失败!\n"); printf("删除后的链表数据为:\n"); ShowList(L); return 0;

优化一下并说明#includestdioh#includestdlibhint maxsize;typedef struct LNode	int data;	struct LNode next;LNode LinkList;初始化int InitListLinkList L	LNode p;	p=LNodemallocsizeofLNode;	p-next=NULL;建表 int GreatLin

原文地址: http://www.cveoy.top/t/topic/chN6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录