数据结构实验
实验内容和目的:
掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。学习基本的查和排序技术。让我们在实际上机中具有编制相当规
模的程序的能力。养成一种良好的程序设计风格。
实验教材:
数据结构题集(C语言版) 清华大学出版社 2007年
实验项目:
实验一、栈和循环队列
㈠、实验内容:
1 栈
掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。
2 循环队列
掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。
㈡、实验代码
1 栈
程序代码:
#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;
}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);
}
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)
c语言二维数组转置 {
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)
{p=p->next;
printf("%7d",p->data);
}
printf("\n");
break;
case 5:
return;
}
}
}
运行结果:
2 循环队列
程序代码:
#include<stdlib.h>
#include<stdio.h>
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef struct
{
int *elem;//队列存储空间
int front;
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.ar=-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]);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论