数据结构学习笔记

#include<stdio.h>
#include<stdlib.h>
typedef int DataType ;
typedef struct LNode{
DataType data;
LNode *next;
}LNode;
void qingxuanze(){
printf("1头插法,2尾插法,3删除,4插入,5查找 ,0退出请输入:\n");
}
LNode *toucha(){
LNode *head;
LNode *p;//定义类型为表格指针的表格块
LNode *s;//这个用来做标记用
int c;//接受输入的数字
head=(LNode*)malloc(sizeof(LNode));//给表格头分配一个内存空间
p=head;//标记位置等于表格头
p->next=NULL;//
printf("头插法请输入数字 等于0结束\n");
scanf("%d",&c);
while(c!=0){
s=(LNode*)malloc(sizeof(LNode));//给一个循环里的表格块分配内存空间
s->data=c; //把表格块赋值
s->next=p->next;//头插法的重点
p->next=s;//头插法的重点
scanf("%d",&c);
}
printf("输入完成\n");
return head;
}
LNode *weicha(){
LNode *head;
LNode *p;//定义类型为表格指针的表格块
LNode *s;//这个用来做标记用
int c;//接受输入的数字
head=(LNode*)malloc(sizeof(LNode));//给表格头分配一个内存空间
p=head;//标记位置等于表格头
printf("尾插法输入数字 等于0结束\n");
scanf("%d",&c);
while(c!=0){
s=(LNode*)malloc(sizeof(LNode));//给一个循环里的表格块分配内存空间
s->data=c; //把表格块赋值
p->next=s;//头插法的重点
p=p->next;//头插法的重点
scanf("%d",&c);
}
p->next=NULL;//
printf("输入完成\n");
return head;
}
void shuchu(LNode *head){
printf("当前单链表的数组为");
for(head=head->next;head;head=head->next)
printf("%d ",head->data);
printf("\n");
}
void charu(LNode *head,int a,int weizhi){
int c=weizhi;
int i;
int zuida;
LNode *s;
LNode *p;
p=head;
for(zuida=0;head;head=head->next){zuida++;}

if(zuida>=weizhi){
s=(LNode*)malloc(sizeof(LNode));
s->data=a;
for(i=1;i<c;i++)
p=p->next;
s->next=p->next;
p->next=s;}
else
printf("输入的位置大于当前数组成员量,");
}
void shanchu(LNode *head,int weizhi){
LNode *p;
int i;
LNode *k;
int zuida;
p=head;
k=head;
for(zuida=0;k;k=k->next){zuida++;}
if(zuida>=weizhi){
for(i=1;i<weizhi;i++)
head=head->next;
p=head->next;
head->next=head->next->next;}
else
printf("输入的位置大于当前数组成员量,");
}

int chazhao(LNode *head,int shuzi){
int a=0;
for(;head;head=head->next){
if(head->data==shuzi){
return a;
}
a++;
}
return 0;
}

void main(){
LNode *head;
int weizhi;
int zhi;
int xuanze;
int chuanhuizhi;
printf("请选择:1头插法,2尾插法 来创建链表");
scanf("%d",&xuanze);
while(xuanze!=0){
if(xuanze!=1&&xuanze!=2&&xuanze!=3&&xuanze!=4&&xuanze!=5){
printf("输入错误 请重新输入\n");
qingxuanze();
scanf("%d",&xuanze);
}
if(xuanze==1){
head=toucha();
shuchu(head);
qingxuanze();
scanf("%d",&xuanze);
}
if(xuanze==2){
head=weicha();
shuchu(head);
qingxuanze();
scanf("%d",&xuanze);
}
if(xuanze==3){
printf("请输入删除位置:\n");
scanf("%d",&weizhi);
shanchu(head,weizhi);
shuchu(head);
qingxuanze();
scanf("%d",&xuanze);
}
if(xuanze==4){
printf("请输入插入的数字:\n");
scanf("%d",&zhi);
printf("请输入插入的位置:\n");
scanf("%d",&weizhi);
charu(head,zhi,weizhi);
shuchu(head);
qingxuanze();
scanf("%d",&xuanze);
}
if(xuanze==5){
printf("请输入查找的值:\n");
scanf("%d",&zhi);
chuanhuizhi=chazhao(head,zhi);
if(chuanhuizhi==0)
printf("%d不在当前单链表\n",zhi);
else
printf("%d的所在位置为%d\n",zhi,chuanhuizhi);
qingxuanze();
scanf("%d",&xuanze);
}

}
}

时间: 2024-10-26 11:27:00

数据结构学习笔记的相关文章

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

小猪的数据结构学习笔记(五)

小猪的数据结构学习笔记(五) 线性表之--循环链表                           --转载请注明出处:coder-pig 循环链表知识点归纳: 相关代码实现: ①判断是否为空表: ②单循环链表的存储结构 其实和单链表的结构是一样的! /*定义循环链表的存储结构*/ typedef struct Cir_List { int data; struct Cir_List *next; }Lnode; ③初始化循环单链表 代码如下: //1.循环链表的初始化 //表示一个元素,如

数据结构学习笔记之栈

栈(stack)  是限定仅在表尾进行插入或删除操作的线性表.因此,对栈来说,表尾端有其特殊含义,称为栈项(top),相应地,表头端称为栈底(bottom).不含元素的空表称为空栈. 栈有两种存储表示方法:顺序栈和链栈.顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置.通常的习惯做法是以top=0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C作描述语言时,如此设定会带来很大不便:另一方面,由于栈在使用过程

数据结构学习笔记(1)-数据结构与算法

基本概念和术语 1.数据  数据元素  数据对象   数据结构 数据:在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称. 数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理. 数据对象:是性质相同的数据元素的集合.是数据的一个子集. 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 2.数据结构 数据结构分为逻辑结构和物理结构 2.1逻辑结构 逻辑结构表示数据之间的相互关系.通常有四种基本结构: 集合:结构中的数据元素除了同属于一种类型外,别

【数据结构学习笔记(C#描述)】(二)算法分析

由上一章的内容可知软件质量的重要特征之一就是能够高效的利用资源(运行效率),因此我们就要考虑如何创建出能够高效利用CPU及内存的数据结构与算法.而算法分析的目的就是为了让我们能够认识到算法对于资源的利用效率. 我们要想分析算法的效率,就需要找到一个评价算法效率的标准及方法. 一般我们如果能快速的利用CPU就会更好的节省时间,因此在时间层面上我们的评价标准就是时间复杂度,而如果我们能够较好的利用内存的话我们将会节省更多的内存空间,因此在空间层面上我们的评价标准就是空间复杂度. 所谓时间复杂度和空间

数据结构学习笔记——线性表的应用

数据结构学习笔记——线性表的应用 线性表的应用 线性表的自然连接 计算任意两个表的简单自然连接过程讨论线性表的应用.假设有两个表A和B,分别是m1行.n1列和m2行.n2列,它们简单自然连接结果C=A*B(i==j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等. 如:         1 2 3                3 5 A  =  2 3 3         B =  1 6       

数据结构学习笔记——绪论

数据结构学习笔记——绪论 为了更贴切的描述一种数据结构,通常采用二元组表示:(对于一种数据结构其逻辑结构唯一) B=(D,R)其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R所组成.即D={ di | 1 <= i<= n, n > 0}R={ rj | 1 <= j<= n, n > 0}D 上的一个关系r是序偶的集合,对于r中任一序偶<x,y>(x,y属于集合D),把x叫做偶序第一节点,把y叫做偶序第二结点,又称序偶的第 一结点为第二结

小猪的数据结构学习笔记(三)

小猪的数据结构学习笔记(三) 线性表之单链表 本章引言: 上一节中我们见识了第一个数据结构--线性表中的顺序表; 当你把操作的代码自己写几遍就会有点感觉了,如果现在让你写顺序表的 插入算法,你能够想出大概的代码么?如果可以,那么你就可以进入新的章节了; 否则,还是回头看看吧!在本节,我们将迎来线性表的链式表示--单链表 单链表和顺序表有什么优势和劣势呢?单链表的头插法和尾插法有什么不同呢? 请大家跟随笔者的脚步来解析线性表中的单链表把! 本节学习路线图 路线图解析: ①先要理解顺序表和单链表各自

数据结构学习笔记-----------------绪论

为了加深自己对数据结构的理解:所以这个专题下会记录我的学习的笔记.  程序设计的实质:对确定的问题选择一种好的结构,加上设计一个好的算法! 计算机解决一个具体的问题,需要经过下列几个步骤: 一.从具体问题抽象出一个适当的数学模型. 二.设计一个解这个数学模型的算法. 三.编写程序进行测试.调整直至得到最终解答. 数据结构:相互之间存在一种或多种特定关系的数据元素的集合. 根据数据元素之间关系的不同特性,通常有下列4类基本结构: 一.集合:结构中的数据元素处理"同属于一个集合"的关系外,