单链表(线性链表)
来源:互联网 发布:法国红酒推荐 知乎 编辑:程序博客网 时间:2024/06/06 03:43
单链表的建立是最基础的数据结构(需要了解链表的基本存储原理)
单链表的建立与遍历(题目来源:http://acm.fjzs.edu.cn/Problem/show/id/9006.htm点击打开链接)
参考代码:
#include <iostream>using namespace std;typedef struct Node{int x;Node *next;}List; //每个结点都分为两个区域,一部分存放数据,另一部分存储下一结点信息List* Get_list(int n){int m;List *head=NULL,*p=NULL,*q=NULL;head=(List*)malloc(sizeof(List));//开辟存储空间p=head; //找到头指针while(n--){scanf("%d",&m);q=(List *)malloc(sizeof(List));p->next=q;q->x=m;p=q; //后移指针}p->next=NULL;//最后一个结点的指针为空return head;}void Myprint(List *head){List *p=NULL;p=head->next;int f=0;while(p!=NULL){if(f==0)printf("%d",p->x);elseprintf(" %d",p->x);p=p->next; //后移指针f++;}printf("\n");}int main(){int n;List *head=NULL;//定义头结点 初始为空;while(~scanf("%d",&n)){ head=Get_list(n);//找到头结点Myprint(head);//代入头结点 输出单链表}return 0;}
下面还有段单链表复制的代码,加强理解:
List Copy
题目链接:http://acm.fjzs.edu.cn/Problem/show/id/9021.htm 点击打开链接
(注意这道题并没有声明结点数据类型,所以要用double.....)
List* Mycopy(List *head) //传入原链表的头结点{if(head==NULL)return NULL; //判空List *copyhead=NULL,*p=NULL,*copyp=NULL,*copyq=NULL; copyhead=(List*)malloc(sizeof(List)); //开辟新的链表头结点空间;copyp=copyhead;p=head->next; while(p!=NULL){copyq=(List *)malloc(sizeof(List));copyp->next=copyq;copyq->x=p->x; //此题x为double型copyp=copyq;p=p->next;}copyp->next=NULL; //最后一个结点的next为空;return copyhead; //返回新的链表头结点;}
下面是链表的插入操作的练习:
题目链接:http://acm.fjzs.edu.cn/Problem/show/id/9033.htm点击打开链接
参考代码:
Lst* insert(Lst *head,int n,int m)//传入已建好的链表、插入的结点位置、插入值;{Lst *q=NULL,*p=NULL;p=(Lst *)malloc(sizeof(Lst));p=head->next;int f=1;while(f!=n) //找到插入位置;{f++;p=p->next;}q=(Lst*)malloc(sizeof(Lst));q->x=m; //插入值存进新结点;q->next=p->next; //新结点的下一个结点先指向插入点后面的那个结点p->next=q; // p指针走向新结点,完成链接;return head;}
链表的删除操作:
题目链接:
http://acm.fjzs.edu.cn/Problem/show/id/2074.htm点击打开链接
参考代码:
Lst *del_lst(Lst *head,double w)//w为要删除的值{Lst *delhead=NULL,*q=NULL,*p=NULL;p=head; // 找到头结点q=head->next; //设另一个指针q指向p的下一个结点,由q来找删除点;while(q!=NULL) {if(q->x==w) //当q找到删除点的时候{p->next=q->next; //p指针直接与q指针的下一结点相连,即绕过删除点;delete q; //这步是优化,释放q结点空间;q=p->next; //q再次指向p结点的下一结点}else //当找不到删除点的时候,p、q结点都一直往下走;{p=p->next; q=q->next;}}return head; //返回头结点,这时的链表已经完成删除操作;}
单链表的顺序排序(插入排序法)
题目链接:
http://acm.fjzs.edu.cn/Problem/show/id/9030.htm点击打开链接
参考代码:
Lst *Sort_lst(Lst *head) //单链表的插入顺序排序(即从小到大){Lst *p1=NULL,*p2=NULL,*p3=NULL; for(p1=head,p2=head->next;p2!=NULL;) //p1代表主链表,p2一直指向p1的后面一个节点{p3=head; //p3是搜索插入结点位置的指针for(;p3!=p2;p3=p3->next) //p3的搜索范围是p2的前面的结点{if(p3->next->x>p2->x) //如果p3下个结点的数据大于p2的数据,即找到不是从小到大排序的点{p1->next=p2->next; //先将p1与p2的下一结点相连p2->next=p3->next; //p2的下一结点与p3的下一结点相连p3->next=p2; //p3的下一结点与p2相连 ; //这三步是完成两个数的位置交换,自己在纸上走一遍就会懂;p2=p1->next; //p2继续指向p1的下一结点;break;}}if(p3==p2) //当p3走到p2时,p2、p1直接向下走{p1=p1->next;p2=p2->next;}}return head;}
- 单链表(线性链表)
- 线性链表(单链表)
- (线性表)单链表
- 线性表之链表(单链表)
- 单链表(线性链表)操作
- python 实现线性链表(单链表)
- 数据结构(线性表)-单链表
- 线性表---单链表(逆置)
- 线性表练习(单链表)
- 线性链表 (1)
- 单链表(线性链表)数据元素插入和删除
- 线性表线性(顺序)存储结构
- 线性结构------线性表(一)
- 线性结构------线性表(二)
- 线性表(线性存储结构)
- C#实现单链表(线性表)
- 线性表 -- 链式存储结构(单链表)
- 数据结构学习笔记 --- 线性表 (单链表)
- 单链表的建立和遍历
- 第75天的交易(2013-8-7)(-50)(-66)(数据单总盈利:51.35)(数据单的耻辱日)
- hdu 1162 Eddy's picture (并查集+快排)
- win7上搭建Android开发环境
- UVA - 424 - Integer Inquiry
- 单链表(线性链表)
- Shiro? Kuro?
- Java Instanceof
- 欧几里德算法求最大公约数和最小公倍数
- Protel99SE里面自带的PCB Footprints.lib不见了怎么办?
- LA 2531 The K-League
- C#方法
- [leetcode] Trapping Rain Water
- 平等对待第三方的“微内核+插件”设计思想