1. 数据结构-基本概念
数据之间的相互关系,包括三种关系:
逻辑结构:
表示数据元素之间的抽象关系(如邻接关系、从属关系等)。
有四种基本的逻辑结构:集合结构、线性结构、树形结构、图状结构
存储结构:
数据的逻辑结构在计算机内的存储形式
分为顺序存储结构、链接存储结构、索引存储结构、散列存储结构
数据运算:
对数据进行的操作:如插入、删除、查找、排序等。
2. 数据结构-算法
算法:
解决特定问题的步骤的描述,在计算机中算法是一个有穷规则(或语句、指令)的有序集合。它确定一解决某一问题的一个运算序列。对于问题的初始输入,通过算法有限步,产生一个或多个输出。
算法是解决问题的思想方法
程序是计算机语言的具体实现
算法的特性:
有穷性、确定性、可行性、输入、一个或多个输出
3. 数据结构-线性表
线性表的基本运算:
建立一个空表:CreateList(L)
置空表:ClearList(L)
判断表是否为空:EmptyList(L)
若表为空,返回值为True(或1),否则返回false(或0)
求表长:Length(L)
求表中某个元素:GetList(L,i)
定位运算:Locate(L,x)
插入:Insert(L,x,i)
删除:Delete(L,i)
另外还有合并、拆分、复制、排序和遍历等复杂的运算
4. 顺序表的实现一
/*seqlist.h头文件*/
/************************
* 创建线性表 reate_seqlist()
* 释放线性表 clear_seqlist()
* 判断线性表是否为空 is_empty_seqlist()
* 判断线性表是否为满 is_full_seqlist()
* 设置为空 set_empty_seqlist()
* 获取线性表的长度 get_length_seqlist()
* 显示线性表内所有有效元素 show_seqlist()
*
* 加入数据 insert_seqlist()
* 删除数据 delete_seqlist()
* 修改数据 change_seqlist()
* 查找数据 search_seqlist()
* */
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAXSIZE 100
typedef int data_t;
typedef struct {
data_t data[MAXSIZE];
int last;
}seqlist_t;
seqlist_t *reate_seqlist(void);
void clear_seqlist(seqlist_t *L);
int is_empty_seqlist(seqlist_t *L);
int is_full_seqlist(seqlist_t *L);
void set_empty_seqlist(seqlist_t *L);
int get_length_seqlist(seqlist_t *L);
void show_seqlist(seqlist_t *L);
int insert_seqlist(seqlist_t *L,data_t x,int pos);
int delete_seqlist(seqlist_t *L,int pos);
int change_seqlist(seqlist_t *L,data_t x,int pos);
int search_seqlist(seqlist_t *L,data_t x);
#endif
/*seqlist.c 函数具体实现文件*/
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
seqlist_t *reate_seqlist(void)
{
seqlist_t *L=NULL;
L = (seqlist_t *)malloc(sizeof(seqlist_t));
if(L == NULL)
{
puts("no memory");
return NULL;
}
L->last = -1;
return L;
}
void clear_seqlist(seqlist_t *L){
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return ;
}
free(L);
return ;
}
int is_empty_seqlist(seqlist_t *L)
{
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return -1;
}
return (L->last == -1);
}
int is_full_seqlist(seqlist_t *L)
{
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return -1;
}
return (L->last == MAXSIZE-1);
}
void set_empty_seqlist(seqlist_t *L)
{
if(L == NULL){
puts("seqlist_t *L is NULL");
return ;
}
L->last = -1;
return ;
}
int get_length_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist_t *L is NULL");
return -1;
}
return (L->last + 1);
}
void show_seqlist(seqlist_t *L)
{
int i = 0;
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return ;
}
for(i=0;i<=L->last;i++)
printf("L->data[%d] = %d\n",i,L->data[i]);
return ;
}
int insert_seqlist(seqlist_t *L,data_t x,int pos)
{
int i=0;
if(is_full_seqlist(L) || (pos<0) || pos>L->last+1)
{
puts("input argv is invalid");
return -1;
}
for(i=L->last;i>=pos;i--)
L->data[i+1] = L->data[i];
L->data[pos] = x;
L->last++;
return 0;
}
int delete_seqlist(seqlist_t *L,int pos)
{
int i = 0;
if((pos<0)||(pos>L->last))
{
puts("input post is invalid");
return -1;
}
for(i=pos;i<get_length_seqlist(L);i++)
L->data[i] = L->data[i+1];
L->last--;
return 0;
}
int change_seqlist(seqlist_t *L,data_t x,int pos)
{
if((pos<0)||(pos>L->last))
{
puts("input pos is invalid");
return -1;
}
L->data[pos] = x;
return 0;
}
int search_seqlist(seqlist_t *L,data_t x)
{
int i = 0;
for(i=0;i<L->last;i++)
{
if(L->data[i] == x)
return i;
}
return -1;
}
/*Makefile 工程管理文件*/
CC = gcc
CFLAGS = -oo -g -Wall
test:test.c seqlist.c
$(CC) $(CFLAGS) -o $@ $^
.PHONY:clean
clean:
rm -rf test
/*test.c 测试文件*/
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
int main(int argc,const char *argv[])
{
int i=0;
seqlist_t *L=NULL;
L = reate_seqlist();
for(i=0;i<=4;i++)
insert_seqlist(L,i,0);
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("=================================================");
puts("search data = 3");
printf("data = 3 pos is %d\n",search_seqlist(L,3));
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("=================================================");
puts("search data = 3");
delete_seqlist(L,search_seqlist(L,3));
printf("data = 3 pos is %d\n",search_seqlist(L,3));
show_seqlist(L);
puts("=================================================");
puts("clear data[2] = 99");
change_seqlist(L,99,2);
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("=================================================");
clear_seqlist(L);
return 0;
}
/*测试结果:
seqlist L length is 5
L->data[0] = 4
L->data[1] = 3
L->data[2] = 2
L->data[3] = 1
L->data[4] = 0
=================================================
search data = 3
data = 3 pos is 1
seqlist L length is 5
L->data[0] = 4
L->data[1] = 3
L->data[2] = 2
L->data[3] = 1
L->data[4] = 0
=================================================
search data = 3
data = 3 pos is -1
L->data[0] = 4
L->data[1] = 2
L->data[2] = 1
L->data[3] = 0
=================================================
clear data[2] = 99
seqlist L length is 4
L->data[0] = 4
L->data[1] = 2
L->data[2] = 99
L->data[3] = 0
=================================================
*/