一、数据结构及其概念
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。
数据:客观事物的符号表示
数据元素:数据的基本单位
数据对象:性质相同的数据元素的集合
数据结构:
是指相互之间具有一定联系的数据元素的集合。元素之间的相互关系称为逻辑结构。
数据的逻辑结构:
1、线性结构
(1)一般线性表
(2)受限线性表:
<1>栈 <2>队列 <3>串 <4>数组 <5>广义表
2、非线性结构
(1)集合
(2)树形结构
(3)图状结构
3、一般线性表的作用:存储数据
按照物理结构划分:连续式/非连续式
实现方式:使用连续内存/使用非连续内存
二、算法
1、算法:解决问题的步骤的描述,在计算机中表现为指令的有限序列
2、算法的特性:
(1):I/O:算法具有0个或多个输入,至少有一个输出
(2):有穷性:无死循环,能在可以接受的时间内完成
(3)确定性:算法的每一步骤都具有确定含义,不会出现二义性
(4)可行性:算法的每一步都必须是可行的
3、算法的设计要求:
(1)正确性 (2)可读性 (3)健壮性 (4)时间效率高。储存量低
三、链表
1、链表的冒泡排序
对链表进行冒泡排序的基本思想就是对当前还未排好序的范围内的全部节点,自上而下对相邻的两个节点依次进行比较和调整,让键值(就是用它排
2、链表的逆置
<span style="font-size:18px;"><strong>#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
}Node;
//创建链表
Node *CreatList(void)
{
int val, i, n;
Node *phead, *p, *q;
phead = NULL;
printf("请输入您要建立的链表长度:\n");
scanf("%d", &n);
printf("请输入您要输入的数据:\n");
for(i=0; i<n; ++i)
{
scanf("%d", &val);
p = (Node *)malloc(sizeof(Node));
p->data = val;
if(NULL == phead)
q = phead = p;
else
q->next = p;
q = p;
}
p->next = NULL;
return phead;
}
//链表的逆置
Node *ReverseList(Node *phead)
{
Node *p, *q, *r;
p = phead;
q=r=NULL;
while(p)
{
q = p->next;
p->next = r;
r = p;
p = q;
}
return r;
}
//输出链表
void ShowList(Node *phead)
{
Node *p;
p = phead;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(void)
{
Node *phead;
phead = CreatList();
printf("链表逆置前的数据:\n");
ShowList(phead);
phead = ReverseList(phead);
printf("链表逆置后的数据:\n");
ShowList(phead);
return 0;
}
</strong></span>