07013《数据结构与算法》 第2章 线性表——链表
2020-06-08 05:21
267 查看
创建一个链表
单链表:
typedef struct node{char data; //数据在这里 struct node *next; //指向下一个结点的指针 }NODE; //这个结构体的大名 NODE *head; //头结点
双链表:
typedef struct dnode{char data; struct node *leftLink; struct node *rightLink; }DNODE;
链表的初始化
无表头:
NODE head=NULL; //建立一个空表
有表头:
NODE*head; head=(NODE*)malloc(sizeof(NODE)); head->next=NULL;
链表的插入
思路:找到a结点其后插入b结点,如无a结点直接将b结点插在表尾;
NODE *LListInsert(NODE*head,char a,char b) { NODE*p,*q; q=(NODE*)malloc(sizeof(NODE)); q->data=b; q->next=NULL; if(head==NULL) return q; else { p=head; while(p->data!=a&&p->next!=NULL) p=p->next; q->next=p->next; //这里一定要注意顺序 p->next=q; //一定要先搞定后面的再搞前面的!!! return(head); //否则就无限循环了!!扑街啊!! } }
双向链表有表头:
void DLListInsert(DNODE *head,char a,char b) { DNODE *p,*q; q = (*DNODE)malloc(sizeof(DNODE)); q->data = b; p = head->rightLink; while (p!=head) if (p->data!=a) p=p->rightLink; else break; if (p==head) p=p.leftLink; q.leftLink=p; q.rightLink=p.rightLink; p.rightLink->leftLink=q; p.rightLink=q; }
链表的删除
无表头:
int LListDelete(NODE**p_head,char a) { NODE*p,*q; q=*p_head; if(q==NULL) return 0; if(q->data==a) { *p_head=q->next; free(q); return 1; } else { while(q->data!=a&&q->next!=NULL) { p=q; q=q->next; } if(q->data==a) { p->next=q->next; free(q); return 1; } else return 0; } }
有表头:
int LListDelete1(NODE*head,char a) { NODE*p,*q; q=head; p=q->head; while(p!=NULL) { if(p->data==a) break; else { q=p; p=p->next; } } if (p!=NULL) { q->next=p->next; free p; return 1; } else return 0; }
双向链表有表头:
int DLListDelete(DNode*head,char x) { DNODE *p; p=head->rightLink; while (p!=head) if (p->data!=x) p=p->rightLink; else break; if (p==head) return 0; p->leftLink->rightLink=p->rightLink; p->rightLink->liftLink=p-liftLink; free(p); return 1; }
链表的查找算法
无表头:
NODE*LListSearch(NODE*head,char x) { NODE*p; p=head; while(p!=NULL) if(p->data!=x) p=p->next else break; return p; }
相关文章推荐
- 《数据结构与算法》 第2章 线性表——习题
- 2-3-归并单链表(顺序表)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-1-单链表顺序存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构与算法 | 线性表及链表
- 2-8-双循环链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-3-归并单链表(顺序表)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-1-单链表顺序存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-8-双循环链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- C# 数据结构与算法系列(三) 线性表之链表
- java数据结构与算法-线性表与链表(1)
- 【数据结构】-线性表-链表 熟练度max=4(split)
- 数据结构与算法(c++)——反转链表
- java 集合 之 链表和线性表以及ArrayList的各方法的介绍及示例 及 ArrayList与LinkedList的区别分析 及 ArrayList与Array(数组)的区别
- 程序员修炼之路-(2)线性表(上):数组与链表
- 数据结构-线性表-链表
- 数据结构第二章--线性表链表