首页 > 代码库 > 线性表之单链表学习小结(初学数据结构必看)
线性表之单链表学习小结(初学数据结构必看)
花了好几个小时,详细规划出了整个过程,包括所有基本操作。。。有什么疑问请下方留言
#include<iostream> using namespace std; #define ElemType char #define ERROR 0 #define OK 1 typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList; void init_linklist(LinkList L)/*对单链表进行初始化*/ { L=(Node*)malloc(sizeof(Node)); /*申请结点空间*/ L->next=NULL; /*置为空表*/ } void CreateFromHead(LinkList L) { Node *s; char c; int flag=1,k=0; while(flag) /* flag初值为1,当输入"$"时,置flag为0,建表结束*/ { c=getchar(); if(c!='$') { s=(LinkList)malloc(sizeof(Node)); /*建立新结点s*/ s->data=http://www.mamicode.com/c;>
附带:循环链表的合并算法LinkList merge_1(LinkList LA,LinkList LB) { /*此算法将两个采用头指针的循环单链表的首尾连接起来*/ Node *p, *q; p=LA; q=LB; while (p->next!=LA) p=p->next; /*找到表LA的表尾,用p指向它*/ while (q->next!=LB) q=q->next; /*找到表LB的表尾,用q指向它*/ q->next=LA; /*修改表LB 的尾指针,使之指向表LA 的头结点*/ p->next=LB->next; /*修改表LA的尾指针,使之指向表LB 中的第一个结点*/ free(LB); return(LA); } LinkList merge_2(LinkList RA,LinkList RB) { /*此算法将两个采用尾指针的循环链表首尾连接起来*/ Node *p; p=RA->next; /*保存链表RA的头结点地址*/ RA->next=RB->next->next;/*链表RB的开始结点链到链表RA的终端结点之后*/ free(RB->next);/*释放链表RB的头结点*/ RB->next=p;/*链表RA的头结点链到链表RB的终端结点之后*/ return RB;/*返回新循环链表的尾指针*/ }
双向链表的插入与删除int DlinkIns(DoubleList L,int i,ElemType e) { DNode *s,*p; int k; p=L; k=0; /*从"头"开始,查找第i-1个结点*/ while(p->next!=L&&k<i) /*表未查完且未查到第i-1个时重复,找到p指向第i个*/ { p=p->next; k=k+1; } /*查找第i-1结点*/ if(p->next == L) /*如当前位置p为空表已找完还未数到第i个,说明插入位置不合理*/ { printf("插入位置不合理!"); return ERROR; } s=(DNode*)malloc(sizeof(DNode)); if (s) { s->data=http://www.mamicode.com/e;>
静态链表的初始化,节点分配&回收void initial(StaticList space, int *av) { int k; space[0].cursor=0; /*设置已用静态单链表的头指针指向位置0*/ for(k=0;k<Maxsize-1;k++) space[k].cursor=k+1; /*连链*/ space[Maxsize-1].cursor=0; /*标记链尾*/ *av=1; /*设置备用链表头指针初值*/ } int getnode(StaticList space, int *av) /*从备用链表摘下一个结点空间,分配给待插入静态链表中的元素*/ { int i; i=*av; *av=space[*av].cursor; return i; } void freenode(StaticList space, int *av, int k) /*将下标为 k的空闲结点插入到备用链表*/ { space[k].cursor=*av; *av=k; }
线性表之单链表学习小结(初学数据结构必看)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。