C语言单链表实现:增删查改操作详解
#include<stdio.h> #include<stdlib.h> #define maxsize 100 typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; //初始化 int InitList(LinkList *L) { (L)=(LNode)malloc(sizeof(LNode)); (*L)->next=NULL; } //建表 int GreatLinkList(LinkList *L) { LNode s; int x; scanf('%d',&x); while(x!=NULL) { 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 ShowList(LinkList L) { LNode *p=L->next; while(p) { printf('%d ',p->data); p=p->next; } printf('\n'); } //插入 int InsterLinkList(LinkList L,int i,int e) { LNode *p=L,s; int k=0; while(p&&k<i-1) { p=p->next; k=k+1; } if(!p||k!=i-1) { printf('插入位置不合理\n'); return 0; } else { 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 k=0; while(p->next&&k<i-1) { p=p->next; k=k+1; } if(!(p->next)||k!=i-1) { printf('所删结合点位置不合理\n'); return -1; } else { q=p->next; p->next=q->next; free(q); return 1; } } //查找 int LocateLinkList(LinkList L,int a) { LNode *p=L->next; int j=1; while(p&&p->data!=a) { p=p->next; j++; } if(!p) { return -1; } else { return j; } } int main() { LinkList L; int n,e,i; InitList(&L); printf('输入表长度:\n'); scanf('%d',&n); printf('输入表中数据:\n'); for(i=0;i<n;i++) { scanf('%d',&e); InsterLinkList(L,1,e); } printf('表中元素为:\n'); ShowList(L); printf('表长为:%d\n',LengthLinkList(L)); printf('输入插入元素的位置和值:\n'); scanf('%d%d',&i,&e); InsterLinkList(L,i,e); printf('插入元素后表中元素为:\n'); ShowList(L); printf('输入查找元素的值:\n'); scanf('%d',&e); i=LocateLinkList(L,e); if(i==-1) { printf('查找失败\n'); } else { printf('%d是第%d个元素\n',e,i); } printf('输入删除元素的位置:\n'); scanf('%d',&i); DeleteLinkList(L,i); printf('删除元素后表中元素为:\n'); ShowList(L); return 0;
原文地址: http://www.cveoy.top/t/topic/nstC 著作权归作者所有。请勿转载和采集!