实现单链表

mac2022-06-30  102

因为在传递函数参数时,使用了引用,所以该程序为C++程序

#include <stdio.h>#include <stdlib.h>#define ElemType inttypedef struct LNode{ ElemType data; struct LNode *next; int length;}LNode, *LinkList;int CreatList(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); if(L==NULL){printf("创建失败");return 0;} L->next=NULL; return 1;}//创建一个链表的头结点void ListTailInsert(LinkList &L,ElemType e){ LinkList r,s; r=L; s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=NULL; while(r->next!=NULL){ r=r->next; } r->next=s;}//尾插法填充节点void ListPrint(LinkList &L){ LinkList p; int i=0; p=L->next; printf("链表为:"); while(p!=NULL){ printf("%d ",p->data); p=p->next; i++; } printf("\n"); L->length=i; printf("链表的长度为:%d\n",L->length);}//打印链表LNode *GetElem(LinkList &L,int i){ int j=1; LinkList p=L->next; if(i<1||i>L->length){ printf("寻找的i的位置无效"); } while(p!=NULL){ if(j==i){return p;} p=p->next; j++; }}//查找第i个结点LNode *LocateElem(LinkList &L,ElemType e){ LinkList p=L->next; int flag=0; while(p!=NULL){ if(p->data==e){flag=1;return p;} p=p->next; } if(flag==0){printf("未找到该结点");}}//按值查找表节点并返回该结点void ListInsert(LinkList &L,int i,ElemType e){ LinkList s,p; if(i<0||i>L->length){printf("插入的i的位置无效");} s=(LinkList)malloc(sizeof(LNode)); s->data=e; if(i==1){ s->next=L->next; L->next=s; }//在第一个结点插入的特殊情况 else{p=GetElem(L,i-1); s->next=p->next; p->next=s;}}//将结点值为e的void ListDelete(LinkList &L,int i){ LinkList p; if(i<0||i>L->length){printf("删除的i的位置无效");} if(i==1){ L->next=L->next->next; }//在第一个结点删除的特殊情况 else{p=GetElem(L,i-1); p->next=p->next->next;}}//删除第i个结点int main(){ LinkList L; LinkList q; LinkList p; CreatList(L); ListTailInsert(L,1); ListTailInsert(L,2); ListTailInsert(L,3); ListTailInsert(L,4); ListTailInsert(L,5); ListPrint(L); q=LocateElem(L,2); printf("%d\n",q->data); p=GetElem(L,3); printf("%d\n",p->data); ListInsert(L,1,6); ListInsert(L,3,7); ListPrint(L); ListDelete(L,1); ListDelete(L,5); ListPrint(L); return 0;}

下面为运行结果

转载于:https://www.cnblogs.com/Yshun/p/11140924.html

相关资源:数据结构实现单链表的基本操作
最新回复(0)