首页 > 编程知识 正文

c语言单链表的创建,c语言链表实例机房管理系统

时间:2023-05-05 23:19:49 阅读:48288 作者:2908

链表基本操作

1建立链表
2头插
3尾插
4清空
5查找
6删除
7销毁

#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define FLASE -1typedef int ElemType;typedef int Status;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;//1 链表初始化Status InitLink_L(LinkList *L){*L=(LinkList)malloc(sizeof(LNode));//if(!(*L))return ERROR;(*L)->next=NULL;return OK;}//2 依次采用头插法输入元素Status InsertHead_H(LinkList *L){LNode *p,*s;ElemType e;int i,N;p=*L;printf("请输入要输入元素的个数:");scanf("%d",&N);printf("请输入元素:n");for(i=1;i<=N;i++) { s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&e);s->data=e;s->next=p->next;p->next=s; }return OK;}//3 依次采用尾插法插入元素Status InsertRear_L(LinkList *L){LNode *p,*s;ElemType e;int i,N;p=*L;printf("请输入要输入元素的个数:"); scanf("%d",&N); printf("请输入元素:n"); for(i=1;i<=N;i++) { s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&e);s->data=e;s->next=p->next;p->next=s;p=s; }return OK;}//4 输出单链表Status Prin_L(LinkList L){ LNode *p,*q; ElemType e; p=L->next; while(p) { e=p->data; p=p->next; printf("%d ",e); } return OK;}//5 输出链表长度Status lengthLink_L(LinkList L){LNode *p;int i=1;if(!L) return ERROR;p=L->next;while(p->next!=NULL){i++;p=p->next;}return i;}//6 判断链表是否为空Status Link_LEmtpy(LinkList L){if(L->next==NULL)return ERROR;return OK;}//7 输出单链表的第n个元素int GetElem(LinkList *L,int i,ElemType *e){int j=1;LNode *p;p=(*L)->next;while(p&&j<i){p=p->next;j++;}if(!p||j>i)return ERROR;*e=p->data; return OK;}//8 输出元素e的位置Status LocateLink_L(LinkList L,ElemType e){LNode *p;int j=1;p=L->next;while(p){ if(p->data==e&&p->next!=NULL)break; elsej++;p=p->next;}return j;}//9 在第n个元素位置上插入e元素Status IsertL_i(LinkList *L,int i,ElemType e){LNode *p,*s;int j=1;p=*L;while(p&&j<i){p=p->next;++j;}if(!p||j>i) return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}//10 清空链表Status Clear_L(LinkList *L){LNode *p,*q;q=*L;while(q->next) { p=q->next; q->next=p->next; free(p); } return 1;}//11 销毁链表Status Destroy_L(LinkList *L){ LNode *p,q;if((*L)->next==NULL) free(*L); elsewhile((*L)->next) { p=(*L)->next; (*L)->next=p->next; free(p); } free(*L);return OK;}//12 删除第n个位置上的元素Status Delete_L(LinkList *L,int i,ElemType *e){LNode *p,*q;int j=1;p=*L;while(p&&j<i){p=p->next;j++;}if(!p||j>i) return ERROR;q=p->next;*e=q->data;p->next=q->next;free(q);return OK;}int main(){LinkList L;int i,j,k,l,selet,longest;printf("***************************************n");printf("1、建立链表 2、头插法输入元头插法输入元素n3、尾插法输入元素 4、显示链表长度n5、查找元素位置 6、清空链表n7、销毁链表 8、链表是否为空n9、在第几个位置插入元素 10、删除第n个位置的元素n11、输出链表元素 12、查找第n个元素n0、退出n");printf("***************************************n");while(1){printf("请输入选择:");scanf("%d",&selet);if(selet==0) break;switch(selet){case 1://1、建立链表{i=InitLink_L(&L);if(i==1)printf("建立成功!n");else if(i==0) printf("建立失败!n");}break;case 2://2、头插法输入元头插法输入元素{i=InsertHead_H(&L);if(i==1) printf("输入成功!n");else printf("输入失败!");}break;case 3://3、尾插法输入元素{ i=InsertRear_L(&L);if(i==1) printf("输入成功!n");else printf("输入失败!n");}break;case 4://4、显示链表长度{i=lengthLink_L(L);if(i==-1) printf("链表不存在!n");printf("链表长度为:%dn",i);}break;case 5://5、查找元素位置{printf("输入要查找的元素:");scanf("%d",&k);i=LocateLink_L(L,k);if(i==0) printf("没找到!n");elseprintf("元素的位置为:%dn",i);}break;case 6://6、清空链表{i=Clear_L(&L);if(i==1) printf("清空成功!n");elseprintf("清空失败!");}break;case 7://7、销毁链表{i=Destroy_L(&L);if(i==1) printf("销毁成功!n");elseprintf("销毁失败!n");}break;case 8://8、链表是否为空{i=Link_LEmtpy(L);if(i==0) printf("链表为空!n");else if(i==1) printf("链表不为空!n"); }break;case 9://9、在第几个位置插入元素{printf("请输入要输入的位置:");scanf("%d",&j);printf("请输入要输入的元素:");scanf("%d",&k);i=IsertL_i(&L,j,k);if(i==1) printf("插入成功!n");else if(i==0) printf("插入失败!n");}break;case 10://10、删除第n个位置的元素{printf("请输入要删除第几个的位置的元素:");scanf("%d",&j);Delete_L(&L,j,&k);if(i==1) printf("删除成功!n");else if(i==0) printf("删除失败!n");printf("删除的元素是:%dn",k);}break;case 11://11、输出链表元素 { Prin_L(L); printf("n"); }break; case 12: { printf("输入要查找第几个元素:"); scanf("%d",&j); GetElem(&L,j,&k); printf("要查找的元素是:%dn",k); }break;}}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。