数据结构课程设计.docx

上传人:b****9 文档编号:25212031 上传时间:2023-06-06 格式:DOCX 页数:47 大小:68.16KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共47页
数据结构课程设计.docx_第2页
第2页 / 共47页
数据结构课程设计.docx_第3页
第3页 / 共47页
数据结构课程设计.docx_第4页
第4页 / 共47页
数据结构课程设计.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(47页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

数据结构课程设计

----个人设计报告

 

院系:

信息工程学院

班级:

姓名

学号:

指导教师:

日期:

2013年1月11号

 

1课程设计目的

1、学习获取知识的方法;

2、提高发现问题、分析问题和解决实际问题的能力;

3、加强创新意识和创新精神;

4、掌握面向实际背景思考问题的方法。

2设计报告

2.1单链表

2.1.1设计内容及要求

本程序用c语言编写,完成单链表的建立、插入、查询、删除、遍历。

2.1.2详细代码

#include

#include

#definelensizeof(structnode)

structnode{//定义单链表结构体

intdata;

structnode*next;};

intn=0;//建立结点的个数

voidfine(){//界面函数

printf("----单链表操作----\n");

printf("1.单链表的删除\n");

printf("2.单链表的插入\n");

printf("3.单链表的查找\n");}

voidprint(structnode*head){//单链表的遍历输出

structnode*p;

p=head;

if(head!

=NULL)

do{printf("%d,",p->data);

p=p->next;}while(p!

=NULL);}

structnode*creat(void){//单链表的建立

structnode*head,*p1,*p2;

inti;

p1=p2=(structnode*)malloc(len);

head=NULL;

scanf("%d",&p1->data);

while(p1->data!

=0){

n=n+1;

if(n==1)head=p1;

elsep2->next=p1;

p2=p1;

p1=(structnode*)malloc(len);

scanf("%d",&p1->data);}

p2->next=NULL;

returnhead;}

structnode*search(structnode*head,intx){//单链表的查找

structnode*s;inti=1;

s=head;

if(s->next!

=NULL){

while(s!

=NULL){if(s->data==x)

printf("x在链表中的位置:

%d\n",i);

s=s->next;

i=i+1;}}

else

printf("找不到要查找的数据\n");

returnNULL;}

structnode*insert(structnode*head,intx,inti){//单链表的插入

structnode*p0,*p1;

intj=0;

p1=head;

while(p1&&jnext;

++j;}

if(!

p1||j>i-1){printf("不合法\n");

printf("请重新输入\n");

printf("\n输入要插入的数据和位置:

");

scanf("%d%d",&x,&i);

insert(head,x,i);}

p0=(structnode*)malloc(len);

p0->data=x;

if(i==1){head=p0;

p0->next=p1;}

else{p0->next=p1->next;

p1->next=p0;}

n=n+1;

printf("插入元素后表如下:

");

print(head);

returnhead;}

structnode*del(structnode*head,intnum){//单链表的删除

structnode*p1,*p2;

if(head==NULL){printf("\n链表为空\n");

returnhead;}

p1=head;

while(num!

=p1->data&&p1->next!

=NULL){p2=p1;

p1=p1->next;}

if(num==p1->data){if(p1==head)

head=p1->next;

else

p2->next=p1->next;

n=n-1;

printf("删除数据后表如下:

");

print(head);}

else

printf("找不到%d\n",num);

returnhead;}

structnode*menue(structnode*head,intm){//测试函数

intdel_num;//要删除的数据

intx;//要插入的数据

inti;//要插入的数据的位置

intn;

inta;//要查找的数据

if(m==1){printf("\n输入要删除的数据:

");

scanf("%d",&del_num);

while(del_num!

='#'){

head=del(head,del_num);

printf("\n");

printf("\n");

printf("是否继续删除:

");

printf("1.是2.否,返回主界面\n");

printf("请选择:

");

scanf("%d",&n);

if(n==1){printf("\n输入要删除的数据:

");

scanf("%d",&del_num);}

elseif(n==2){

printf("\n");

fine();

printf("请选择:

");

scanf("%d",&n);

menue(head,n);}}

printf("\n");}

elseif(m==2){printf("\n输入要插入的数据和要插入的位置:

");

scanf("%d%d",&x,&i);

while(x!

='#'){

head=insert(head,x,i);

printf("\n");

printf("\n");

printf("是否继续插入:

");

printf("1.是2.否,返回主界面\n");

printf("请选择:

");

scanf("%d",&n);

if(n==1){printf("\n输入要插入的数据和位置:

");

scanf("%d%d",&x,&i);}

elseif(n==2){

printf("\n");

fine();

printf("请选择:

");

scanf("%d",&n);

menue(head,n);}}

printf("\n");}

elseif(m==3){printf("\n输入要查找的数据:

");

scanf("%d",&a);

while(a!

=0){search(head,a);

printf("\n");

printf("\n");

printf("是否继查找:

");

printf("1.是2.否,返回主界面\n");

printf("请选择:

");

scanf("%d",&n);

if(n==1){printf("\n输入要查找的数据:

");

scanf("%d",&a);}

elseif(n==2){printf("\n");

fine();

printf("请选择:

");

scanf("%d",&n);

menue(head,n);}}}

else{printf("输入错误,请重新输入\n");

scanf("%d",&n);

menue(head,n);}}

intmain(){structnode*head;//建立head为头的头结点

intm;

printf("单链表的建立\n");

head=creat();//建立单链表

printf("操作成功表如下:

");

printf("\n");

print(head);

printf("\n");

printf("\n");

fine();

printf("请选择:

");

scanf("%d",&m);

menue(head,m);}

2.1.3测试结果与分析

输入0时结束输入

2.2顺序栈

2.2.1设计内容及要求

本程序用c语言编写,完成顺序栈的建立、入栈,出栈操作。

2.2.2详细代码

#include

#include

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

typedefcharType;

typedefstruct{Type*base;

Type*top;

intstacksize;}SqStack;

voidshow(){//界面函数

printf("----$栈的操作$----\n");

printf("1.入栈操作\n");

printf("2.出栈操作\n");}

voidDispStack(SqStack*S){//从栈顶到栈底输出元素

inti;

if(S->top==S->base)

printf("空栈!

");

for(i=S->top-S->base;i>0;i--)

printf("%c",S->base[i-1]);

printf("\n");}

intInitStack(SqStack*S){//栈的建立

S->base=(Type*)malloc(STACK_INIT_SIZE*sizeof(Type));

if(!

S->base)

return0;

S->top=S->base;

S->stacksize=STACK_INIT_SIZE;

return1;}

intGetTop(SqStack*S,Type&e){

if(S->top==S->base)

return0;

e=*(S->top-1);return1;}

voidPush(SqStack*S,Typee){//入栈操作

if(S->top-S->base>=S->stacksize){

S->base=(Type*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(Type));

if(!

S->base)

S->top=S->base+S->stacksize;

S->stacksize+=STACKINCREMENT;}

*S->top++=e;}

intPop(SqStack&S){//出栈操作

Typee;

if(S.top==S.base)

return0;

e=*--S.top;

printf("出栈元素为:

");

printf("%c",e);

printf("\n");

return1;}

voidtest(SqStack*S,inta){//测试函数

Typex;//要入栈的数据

intn;

if(a==1){printf("\n输入要入栈的数据:

");

scanf("%c",&x);

while(x!

='#'){Push(S,x);

DispStack(S);

printf("\n");

printf("是否继续入栈:

");

printf("1.是2.否,返回主界面\n");

printf("请选择:

");

scanf("%d",&n);

if(n==1){printf("\n输入要入栈的数据:

");

scanf("%d",&x);}

elseif(n==2){printf("\n");

show();

printf("请选择:

");

scanf("%d",&n);

test(S,n);}}

printf("\n");}}

intmain(){Typee,x;

intm;

SqStack*S;

InitStack(S);

printf("栈的建立:

\n");

scanf("%c",&x);

Push(S,x);

while(x!

='\n'){scanf("%c",&x);

Push(S,x);}

printf("栈S如下:

");

DispStack(S);

show();

printf("请选择:

");

scanf("%d",&m);

printf("\n");

test(S,m);}

2.2.3测试结果与分析

2.3栈实现行编辑

2.3.1设计内容及要求

本程序用c语言编写,要栈实现行编辑。

2.3.2详细代码

#ifndefSTACKH_H_INCLUDED

#defineSTACKH_H_INCLUDED

#include

#include

#defineSTACK_INIT_SIZE10

#defineSTACK_INCR_SIZE3

typedefcharElemType;

typedefstruct{ElemType*sbase;

ElemType*stop;

intstacksize;}STACK;

intInitStack(STACK*s);

intDestroyStack(STACK*s);

intIsEmpty(STACK*s);

intClearStack(STACK*s);

intGetTop(STACK*s,ElemType*e);

intGetLength(STACK*s);

intPush(STACK*s,ElemTypee);

intPop(STACK*s,ElemType*e);

intTraverseStack(STACK*s);

intStackToFile(STACK*s);

intLineEditor();

<栈实现行编辑.cpp>

#include"stackh.h"

#include

intInitStack(STACK*s){s->sbase=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));

if(!

s->sbase){printf("OVERFLOW!

\n");

exit

(1);}

s->stop=s->sbase;

s->stacksize=STACK_INIT_SIZE;

return0;}

intDestroyStack(STACK*s){free(s->sbase);

s->sbase=NULL;

s->stop=NULL;

s->stacksize=0;

return0;}

intClearStack(STACK*s){s->stop=s->sbase;

return0;}

intIsEmpty(STACK*s){if(s->sbase==s->stop)

{return1;}

else{return0;}}

intGetTop(STACK*s,ElemType*e){if(s->sbase==s->stop){

printf("OVERFLOW!

\n");

exit

(1);}

e=s->stop-1;

return0;}

intGetLength(STACK*s){

returns->stop-s->sbase;}

intPush(STACK*s,ElemTypee){

if(GetLength(s)>=s->stacksize){s->sbase=(ElemType*)realloc(s->sbase,(s->stacksize+

STACK_INCR_SIZE)*sizeof(ElemType));

if(!

s->sbase){printf("OVERFLOW!

\n");}

s->stop=s->sbase+s->stacksize;

s->stacksize+=STACK_INCR_SIZE;}

*s->stop++=e;

return0;}

intPop(STACK*s,ElemType*e){

if(IsEmpty(s)){printf("OVERFLOW!

\n");

exit

(1);}

*e=*--s->stop;

return0;}

intTraverseStack(STACK*s){if(s->sbase==s->stop){

printf("OVERFLOW!

\n");

exit

(1);}

ElemType*p=s->sbase;

while(p!

=s->stop){printf("%c",*p++);}

printf("\n");

return0;}

intStackToFile(STACK*s){FILE*fp=fopen("f:

//www.txt","a+");

fwrite(s->sbase,sizeof(ElemType),GetLength(s),fp);

fclose(fp);

return0;}

#include"stackh.h"//实现行编辑器

voidshow()

{printf("**********************************行编辑器**************************************");

printf("\n");

printf("=========================帮助===================================================");

printf("\t1.想清除单字符时字符后输入'#'以清除此字符\n");

printf("\t2.想清楚整行时在行后面尾输入'@'以清除整行\n");

printf("\t3.想要清除输入的所有字符请输入'^'进行清屏\n");

printf("================================================================================");

printf("\n");

printf("********************************以下进行编辑************************************\n");}

intLineEditor(){charch;

STACKsline;

InitStack(&sline);

while((ch=getchar())!

=EOF){switch(ch){

case'#':

if(IsEmpty(&sline)){

printf("ERROR!

\n");

printf("-------------------请重新输入-----------------\n");

LineEditor();}

chartm;

Pop(&sline,&tm);

if(tm=='\\'){Push(&sline,ch);}

break;

case'@':

if(IsEmpty(&sline)){printf("ERROR!

\n");

printf("-------------------请重新输入-------------------\n");

LineEditor();}

chartmp;

Pop(&sline,&tmp);

if(tmp=='\\'){Push(&sline,ch);}

else{ClearStack(&sline);}

break;

case'\n':

Push(&sline,ch);

TraverseStack(&sline);

StackToFile(&sline);

ClearStack(&sline);

break;

case'^':

system("cls");

ClearStack(&sline);

show();

break;

default:

Push(&sline,ch);

break;}}return0;

}#include"stackh.h"intmain(){show();LineEditor()return0;}

2.3.3测试结果与分析

2.4迷宫求解

2.4.1设计内容及要求

本程序用c语言编写,用栈显示迷宫,找到从出口到入口的所有路径。

2.4.2详细代码

#include

#include

intmaze[100][100];

intM,N;//输入迷宫的行数列数

intp=0,y=0;

intstartI,startJ;//入口坐标

intendI,endJ;//出口坐标

intvisit(inti,intj){intm,n;

maze[i][j]=8;//该点走过,标记为8

//走到终点,成功,打印路径

if(i==endI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1