数据结构 链表基础算法

  1 #include<stdio.h>
  2 #include<malloc.h>
  3 #include<stdlib.h>
  4 typedef struct node
  5 {
  6 int data;
  7 struct node * pNext;
  8 }NODE,* PNODE;
  9 //节点定义
 10 //函数声明
 11 PNODE create_list();
 12 void traverse_list(PNODE);
 13 int len_list(PNODE);
 14 void sort_list(PNODE);
 15 void delete_list(PNODE);
 16 void insert_list(PNODE);
 17 void update_list(PNODE);
 18 //函数声明结束
 19 int main(void)
 20 {
 21     PNODE pHead=create_list();
 22     traverse_list(pHead);
 23     sort_list(pHead);
 24     delete_list(pHead);
 25     insert_list(pHead);
 26     update_list(pHead);
 27     return 0;
 28 }
 29 PNODE create_list()
 30 {
 31     int len,val,i;
 32     printf("请输入链表的长度 len=");
 33     scanf("%d",&len);
 34     PNODE phead=(PNODE)malloc(sizeof(NODE));
 35     if(phead==NULL)
 36     {
 37         printf("内存分配失败");
 38         exit(-1);
 39     }
 40     PNODE ptail=phead;
 41     ptail->pNext=NULL;
 42     for(i=0;i<len;i++)
 43     {
 44         PNODE pnew=(PNODE)malloc(sizeof(NODE));
 45         if(pnew==NULL)
 46         {
 47         printf("内存分配失败");
 48         exit(-1);
 49         }
 50         printf("请输入第%d个节点的值",i+1);
 51         scanf("%d",&val);
 52         pnew->data=val;
 53         ptail->pNext=pnew;
 54         pnew->pNext=NULL;
 55         ptail=pnew;
 56     }
 57 return phead;
 58 }            //创建初始化链表
 59 void traverse_list(PNODE phead)
 60 {
 61     PNODE p=phead->pNext;
 62     while(p!=NULL)
 63     {
 64     printf("%d\t",p->data);
 65     p=p->pNext;
 66     }
 67     printf("\n");
 68 }        //遍历链表
 69 int len_list(PNODE phead)
 70 {
 71     PNODE p=phead->pNext;
 72     int len=0;
 73     while(p!=NULL)
 74     {
 75     p=p->pNext;
 76     len++;
 77     }
 78     return len;
 79 }            //链表元素个数
 80 void sort_list(PNODE phead)
 81 {
 82     int i=0,j=0,t;
 83     int len=len_list(phead);
 84     PNODE p,q;
 85 for(p=phead->pNext;i<len-1;i++,p=p->pNext)
 86 {
 87     for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
 88     {
 89         if(p->data<q->data)
 90         {
 91         t=p->data;
 92         p->data=q->data;
 93         q->data=t;
 94         }
 95     }
 96 }
 97     printf("排序后\n");
 98     traverse_list(phead);
 99 }        // 冒泡排序
100
101 void delete_list(PNODE phead)
102 {
103     int i=0,pos;
104     PNODE p=phead;
105     printf("请输入要删除的值的位置:");
106     scanf("%d",&pos);
107 while(p->pNext!=NULL&&i<pos-1)
108 {
109     p=p->pNext;
110     i++;
111 }
112 if(p->pNext==NULL||i>pos-1)
113 {
114     printf("输入位置有误\n");
115     delete_list(phead);
116     return;
117 }
118 PNODE q=p->pNext;
119 p->pNext=p->pNext->pNext;
120 printf("删除%d成功\n",q->data);
121 free(q);
122 q=NULL;
123 traverse_list(phead);
124 }        //删除指定节点
125
126 void insert_list(PNODE phead)
127 {
128     int pos,i=0;
129     PNODE p=phead;
130     printf("请输入要插入的位置:");
131     scanf("%d",&pos);
132     while(p->pNext!=NULL&&i<pos-1)
133     {
134         p=p->pNext;
135         i++;
136     }
137     if(p->pNext==NULL||i>pos-1)
138     {
139         printf("输入位置有误\n");
140         insert_list(phead);
141         return;
142     }
143         PNODE pnew=(PNODE)malloc(sizeof(NODE));
144         if(pnew==NULL)
145         {
146             printf("内存分配失败");
147             exit(-1);
148         }
149         int data;
150         printf("请输入要插入的数值:");
151         scanf("%d",&data);
152         pnew->data=data;
153         pnew->pNext=p->pNext;
154         p->pNext=pnew;
155         traverse_list(phead);
156 }        //在指定位置插入节点
157
158 void update_list(PNODE phead)
159 {
160 int pos,i=0;
161 PNODE p=phead;
162 printf("请输入要修改的位置:");
163 scanf("%d",&pos);
164 while(p->pNext!=NULL&&i<pos-1)
165 {
166 p=p->pNext;
167 i++;
168 }
169 if(p->pNext==NULL||i>pos-1)
170 {
171 printf("位置输入有误,请从输入\n");
172 update_list(phead);
173 return;
174 }
175 int val;
176 printf("请输入修改后的值:");
177 scanf("%d",&val);
178 printf("修改成功,%d修改为",p->pNext->data);
179 p->pNext->data=val;
180 printf("%d\n",val);
181 traverse_list(phead);
182 } //修改具体位置节点的值

最近在看数据结构,就写了写有关链表的一些基础东西,虽然很基础,但是也花了一些心思把他敲了出来,呵呵,自己太菜了点

时间: 2024-10-12 14:38:28

数据结构 链表基础算法的相关文章

01.数据结构概念与算法基础

数据结构概念与算法基础 一.数据结构概念 1.数据:是描述客观事务的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 2.数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录.比如畜类中,牛.马.羊都属于数据元素. 3.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.比如人这样的数据元素,可以有眼.耳.鼻等数据项. 4.数据对

数据结构基础(2)---链表基础概念

链表的优缺点: 优点: 空间没有限制 插入删除元素很快 缺点: 存取速度很慢. 定义: n个节点离散分配(在内存中不是连续存储) 彼此通过指针相连 每个节点只有一个前驱节点,每个节点只有一个后续节点 首节点没有前驱节点,尾节点没有后续节点. 首节点: 第一个有效节点 尾节点: 最后一个有效节点 头节点: 头结点的数据类型和首节点的类型一样 没有存放有效数据,最最前面的,是在 首节点之前的,主要是为了方便对链表 的操作. 头指针:(指向头) 指向头节点的指针变量 尾指针: 指向尾节点的指针 (头结

基础数据结构 链表、栈、队列

数据结构是程序设计中一个非常重要的部分,基本的数据结构包括链表.栈和队列,当然高级一点的还有树.图等,实际上链表.栈和队列都是线性表,只是在操作和表示方式上有所不同,线性表用顺序结构表示就是顺序表,用链结构表示就是链表,如果对线性表的操作加以限制,只能有在表尾进行插入和删除元素,这就变成栈了,如果只能允许元素从表尾插入,表头删除,这就变成队列了. 链表 /* * 数据结构 链表 * 链式结构 */ #include <iostream> using namespace std; enum St

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

单链表基础操作的Java实现

链表是很多的数据结构的基础,比如说:队列,栈,二叉树,优先级队列等等,而链表也是很多公司面试和笔试的常考题. 链表的基本操作包括:判断是否为空,头部插入,尾部插入,根据key值查找,根据key值删除,遍历链表. 当然稍微复杂一点的操作还包括:链表的逆序,链表的排序等等. 在链表中,包含两个类:Node(节点) package com.qiao.lb; public class Node { public long data; public Node next; public Node(long

数据结构【基础知识点总结】

数据结构[基础知识点总结] 一.数据 数据(Data)是信息的载体,它能够被计算机识别.存储和加工处理.它是计算机程序加工的原料,应用程序处理各种各样的数据. 计算机科学中,所谓数据就是计算机加工处理的对象,它可以是数值数据,也可以是非数值数据.数值数据是一些整数.实数或复数,主要用于工程计算.科学计算和商务处理等: 非数值数据包括字符.文字.图形.图像.语音等. 二.数据元素 数据元素(Data Element)是数据的基本单位.在不同的条件下,数据元素又可称为元素.结点.顶点.记录等.例如,

一篇文章带你了解JavaScript中的基础算法之“字符串类”

作者 | Jeskson 来源 | 达达前端小酒馆 1 算法可以干什么呢?提高什么?有什么好处呢? 前端的同学需要提升编程核心内功,建立和健全算法知识体系,基础算法.数据结构.进阶算法,由浅入深讲解,透彻理解抽象算法,算法面试是关键一环,冲击大厂前端offer. 学习算法前掌握ES6哦!需要掌握单元测试的语言,Jest Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works wi

数据结构-各类排序算法总结[结局]

各类排序算法总结 五.分配类排序->基数排序: 基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成"多关键码"进行排序的方法.基数排序属于"低位优先"排序法,通过反复进行分配与收集操作完成排序. 对于数字型或字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字, 此时可以采用这种"分配-收集"的办法进行排序,称作基数排序法.其好处是不需要进行关键字间的比较. 例如:对下列这组关键字{278, 109, 063, 930

链表创建和链表遍历算法的演示_C语言

今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: 1 /*24_链表创建和链表遍历算法的演示*/ 2 # include <stdio.h> 3 # include <malloc.h> 4 # include <stdlib.h> 5 6 typedef struct Node 7 { 8 int data;//数据域 9 struct Node * pNext;//指针域 10 }NODE, *PNODE;//