数据结构实验报告(C语言)(强力推荐)

时间:2025-07-02

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

数据结构实验

实验内容和目的:

掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。学习基本的查找和排序技术。让我们在实际上机中具有编制相当规模的程序的能力。养成一种良好的程序设计风格。

实验教材:

数据结构题集(C语言版) 清华大学出版社 2007年

实验项目:

实验一、栈和循环队列

㈠、实验内容:

① 栈

掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。

② 循环队列

掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。

㈡、实验代码

① 栈

程序代码:

#include <stdio.h>

#include <malloc.h>

#define Stack_Size 6

#define ERROR 0

#define OK 1

typedef int SElemType;

typedef struct SNode

{

SElemType data;

struct SNode *next;

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

}SNode,*LinkStack;

int CreatTwo(LinkStack &head,int n)

{

int i;

SNode *p;

head=(LinkStack)malloc(sizeof(SNode));

head->next=NULL;

printf("请输入数据(数字):\n");

for(i=n;i>0;--i)

{

p=(SNode *)malloc(sizeof(SNode));

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

p->next=head->next;

head->next=p;

}

return 1;

}

int menu_select()

{

int sn;

for(;;)

{

scanf("%d",&sn);

if(sn<1||sn>6)

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

else

break;

}

return sn;

}

int Push(LinkStack &top,SElemType e)

{

SNode *q;

q=(LinkStack)malloc(sizeof(SNode));

if(!q)

{

printf("溢出!\n");

return(ERROR);

}

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

q->data=e;

q->next=top->next;

top->next=q;

return(OK);

}

int Pop(LinkStack &top,SElemType &e)

{

SNode *q;

if(!top->next)

{printf("error!\n");

return(ERROR);}

e=top->next->data;

q=top->next;

top->next=q->next;

free(q);

return(OK);

}

void main()

{ int e;

LinkStack top;

printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");

while(1)

{

switch(menu_select())

{

case 1:

if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:

printf("Push:\n");

scanf("%d",&e);

if(Push(top,e))printf("Success!\n");

break;

case 3:

if(Pop(top,e))printf("Success!\n");

printf("%d\n",e);

break;

case 4:

LinkStack p;

printf("所有栈里的元素:\n");

p=top;

while(p->next)

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

{p=p->next;

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

}

printf("\n");

break;

case 5:

return;

}

}

}

运行结果:

② 循环队列

程序代码:

#include<stdlib.h>

#include<stdio.h>

#define OVERFLOW -1

#define OK 1

#define ERROR 0

#define MAXSIZE 100

typedef struct

{

int *elem;//队列存储空间

int front;

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

int rear;

}SqQueue;

//判断选择是否正确

int menu_select()

{

int sn;

for(;;)

{

scanf("%d",&sn);

if(sn<1||sn>6)

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

else

break;

}

return sn;

}

//参数(传出)SqQueue &Q,循环队列(空)

int InitQueue(SqQueue &Q)

{

Q.elem=(int *)malloc(MAXSIZE*sizeof(int));

if(!Q.elem)exit(OVERFLOW);

Q.front=Q.rear=-1;

for(int i=0;i<MAXSIZE;i++)

Q.elem[i]=-1;

return OK;

}

//返回Q的元素个数

int QueueLength(SqQueue Q)

{

return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;

}

//显示队列的元素

void Display(SqQueue Q)

{

for(int i=0;i<=QueueLength(Q);i++)

if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);

printf("\n");

}

//入队

我自己编的C语言实验报告,每个程序都在VC6.0环境下编译通过~~~非常好用

int EnQueue(SqQueue &Q,int e)

{

Q.rear=(Q.rear+1)%MAXSIZE;

if(Q.rear==Q.front)return ERROR;

Q.elem[Q.rear]=e;

return OK;

}

//出队

int DeQueue(SqQueue &Q,int &e)

{

if(Q.front==Q.rear)return ERROR;

e=Q.elem[Q.front+1];

Q.elem[Q.front+1]=-1;

Q.front=(Q.f …… 此处隐藏:5686字,全部文档内容请下载后查看。喜欢就下载吧 ……

数据结构实验报告(C语言)(强力推荐).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219