数据结构之链表

    xiaoxiao2023-11-20  149

    一.链表 1.定义: typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; 2.头插法 LinkList List_HeadInsert(LinkList &L,ElemType x){ LNode *s; s=(LNode *)malloc(sizeof(LNode)); //s=new LNode; s->data=x; s->next=L->next; L->next=s; return L; } 3.尾插法: LinkList List_TailInsert(LinkList &L,ElemType x){ LNode *s; LNode *p=L->next; s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=null; while§ p=p->next; p=s; return L } 4.按序号查找节点 LNode *GetElem(LinkList L,int i){ int j=1; LNode *p=L->next; if(i==0) return L; if(i<1) return null; while(p&&j<i){ p=p->next; j++; } return p; } 5.按值查找节点 LNode *LocateElem(LinkList L,ElemType e){ LNode *p=L->next; while(p&&p->data!=e) p=p->next; return p; } 6.在具体位置处操作: LinkList BeforeInsert(LinkList &L,int i,ElemType e){ LNode *p,*r; p=(LNode *)malloc(sizeof(LNode)); p->data=e; r= GetElem(L,i-1); p->next=r->next; r->next=p; return L; } 7.在某节点前面插入: LinkList LaterInsert(LinkList &L,ElemType x,ElemType e){ LNode *p,*r; ElemType term; p=(LNode *)malloc(sizeof(LNode)); p->data=e; r=LocateElem(L,x); p->next=r->next; r->next=p; term=r->data; r->data=p->data; p->data=term; } 8.删除指定位置的节点: LinkList DeleteLnode(LinkList &L,int i){ LNode *p,*r; p=GetElem(L,i-1); r=p->next; p->next=r->next; free®; return r; }

    9.删除指定值的节点: LinkList DeleteElem(LinkList &L,ElemType e){ LNode *p,*r; p=LocateElem(L,e); r=p->next; p->data=r->data; p->next=r->next; free®; return L; } 10.求链表长度: int LengthLinkList(LinkList L){ int n=0; LNode *p=L->next; while§{ n++; p=p->next; } return n; } 二.双链表 1.定义 typedef struct DNode{ ElemType data; struct DNode *prior,*next; }DNode,*DLinkList;

    2.插入操作:头插法 DLinkList List_HeadInsert (DLinkList &D,ElemType x){ DNode *s,*p=D; s=new DNode; //s=(DNode *)malloc(sizeof(DNode)); s->data=x; s->next=p->next; p->next->prior=s; p->next=s; s->prior=p; return D; } 3.插入操作:尾插法 DLinkList List_TailInsert(DLinkList &D,ElemType x){ DNode *p=D; DNode *s; s=new DNode; s->data=x; while(p->next){ p=p->next; } p->next=s; s->prior=p; s->next=null; return D; } 4.删除指定值的节点 DLinkList DeleteElem(DLinkList &D,ElemType x){ DNode *p,*r; p=LocateDNode(L,x); r=p->prior; r->next=p->next; p->next->prior=r; free§; return D; } 三.循环单链表:最后一个节点不是null,而是指向头节点 四.循环双链表:头节点的prior指针指向表尾节点,尾节点的next为L,当循环双链表为空表时,头节点的prior,next都为L。 五.静态链表 定义: #define MaxSize 100 typedef struct{ ElemType data; int next; }SLinkList[MaxSize]; 静态链表以next==-1作为结束的标志,借助数组来描述线性表的链式存储结构

    #大学生一枚,写微博只为提升自己,交志同道合的朋友,有兴趣关注微信公众号:飞享

    最新回复(0)