数据结构的概念
学这东西感觉一下又回到了十年前
数据结构(data structure):数据的组织方式
算法+数据结构=程序
堆栈(后进先出):
示例代码:
#include<stdio.h>
char stack[512];
int top=0;
void push(char c){
stack[top++]=c;
}
char pull(){
return stack[--top];
}
int is_empty(void){
return top==0;
}
int main(void){
push('a');
push('b');
push('c');
while(!is_empty()){
putchar(pull());
}
putchar('\n');
return 0;
}
深试代化搜索
用深度优代搜索解决迷宫问题
#include<stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
/*点坐标*/
struct point {
int row,col;
}
stack[512];
int top=0;
/*压栈*/
void push(struct point p){
stack[top++]=p;
}
/*弹栈*/
struct point pop(void){
return stack[--top];
}
/*检查堆栈是否为空*/
int is_empty(void){
return top==0;
}
/*地图*/
int maze[MAX_ROW][MAX_COL]={
0,1,0,0,0,
0,1,0,1,0,
0,0,0,0,0,
0,1,1,1,0,
0,0,0,1,0,
};
/*输出堆栈值*/
void print_maze(void){
int i,j;
for(i=0;i<MAX_ROW;i++){
for(j=0;j<MAX_COL;j++){
printf("%d ",maze[i][j]);
}
putchar('\n');
}
printf("***************\n");
}
/* */
struct point predecessor[MAX_ROW][MAX_COL]={
{{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}},
{{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}},
{{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}},
{{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}},
{{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}},
};
/*保存走地图线路坐标*/
void visit(int row,int col,struct point pre){
struct point visit_point={row,col};
maze[row][col]=2;
predecessor[row][col]=pre;
push(visit_point);
}
int main(){
/*起点*/
struct point p={0,0};
maze[p.row][p.col]=2;
push(p);
while(!is_empty()){
p=pop();
/*goal到达终点*/
if(p.row==MAX_ROW-1&&p.col==MAX_COL-1){
break;
}
/*right*/
if(p.col+1<MAX_COL&&maze[p.row][p.col+1]==0){
visit(p.row,p.col+1,p);
}
/*down*/
if(p.row+1<MAX_ROW&&maze[p.row+1][p.col]==0){
visit(p.row+1,p.col,p);
}
/*left*/
if(p.col-1>=0&&maze[p.row][p.col-1]==0){
visit(p.row,p.col-1,p);
}
/*up*/
if(p.row-1>=0&&maze[p.row-1][p.col]==0){
visit(p.row-1,p.col,p);
}
print_maze();
}
if(p.row==MAX_ROW-1&&p.col==MAX_COL-1){
printf("(%d,%d)\n",p.row,p.col);
while(predecessor[p.row][p.col].row!=-1){
p=predecessor[p.row][p.col];
printf("(%d,%d)\n",p.row,p.col);
}
}else{
printf("No Path!\n");
}
return 0;
}
队列的广度优代搜索
队列:先进先出
两种操作:入队enqueue/出队dequeue
示例代码:
#include<stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
struct point {int row,col,predecessor;}
queue[512];
int head=0,tail=0;
/*入队*/
void enqueue(struct point p){
queue[tail++]=p;
}
/*出队*/
struct point dequeue(void){
return queue[head++];
}
int is_empty(void){
return head==tail;
}
int maze[MAX_ROW][MAX_COL]={
0,1,0,0,0,
0,1,0,1,0,
0,0,0,0,0,
0,1,1,1,0,
0,0,0,1,0,
};
void print_maze(void){
int i,j;
for(i=0;i<MAX_ROW;i++){
for(j=0;j<MAX_COL;j++){
printf("%d ",maze[i][j]);
}
putchar('\n');
}
printf("***************\n");
}
void visit(int row,int col){
struct point visit_point={row,col,head-1};
maze[row][col]=2;
enqueue(visit_point);
}
int main(void){
struct point p={0,0,-1};
maze[p.row][p.col]=2;
enqueue(p);
while(!is_empty()){
p=dequeue();
/*goal到达终点*/
if(p.row==MAX_ROW-1&&p.col==MAX_COL-1){
break;
}
/*right*/
if(p.col+1<MAX_COL&&maze[p.row][p.col+1]==0){
visit(p.row,p.col+1);
}
/*down*/
if(p.row+1<MAX_ROW&&maze[p.row+1][p.col]==0){
visit(p.row+1,p.col);
}
/*left*/
if(p.col-1>=0&&maze[p.row][p.col-1]==0){
visit(p.row,p.col-1);
}
/*up*/
if(p.row-1>=0&&maze[p.row-1][p.col]==0){
visit(p.row-1,p.col);
}
print_maze();
}
if(p.row==MAX_ROW-1&&p.col==MAX_COL-1){
printf("(%d,%d)\n",p.row,p.col);
while(p.predecessor!=-1){
p=queue[p.predecessor];
printf("(%d,%d)\n",p.row,p.col);
}
}else{
printf("No Path!\n");
}
return 0;
}
分享到:
相关推荐
C语言学习笔记C语言学习笔记C语言学习笔记C语言学习笔记
C语言学习笔记 C语言学习笔记 C语言学习笔记 C语言学习笔记
c语言学习笔记c语言学习笔记c语言学习笔记c语言学习笔记c语言学习笔记c语言学习笔记c语言学习笔记
认真学习的人从国内某个培训机构上课时,记录的C语言学习笔记,其中包含所有的C语言基本语法,文章中对指针、字符操作有好多介绍,整理的很全面,并且有图示哦!! 相信对大家学习C语言会有很大帮助!!!
C语言学习笔记.zip
C语言学习笔记C语言学习笔记
c语言学习笔记
C语言学习笔记.pdf
C语言学习笔记 必看知识点 精品啊 值得看
C语言基础部分学习笔记全部
C语言学习笔记,C语言学习笔记,qsort排序。。。。。。。。。。。。。。。。。。。。。。。。。。。。
自己学习过程中记录的一些信息,可能不全C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针
这是本人学习C语言的一些经验总结和学习笔记,想参考的可以看一下
对想入门和增加C语言的开发技术,都是挺好的文档,希望对各位程序员的能力提高有所帮助。
从头到尾,超级全面。
C语言基础学习笔记,都是自己读C语言的一些理解,如果大家有发现理解错误的地方可以跟我说下,希望能一起学习共同进步
C语言学习笔记.docx
C语言学习笔记.doc
c语言学习笔记.pdf