数据结构实验报告全集

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 . 实验目的 掌握串基本操作: 初始化、 联接、 替换、子串等运算在堆分配存储储结构上的程序设计方法。 2 . 实验要求 (1 ) 认真阅读和掌握和本实验相关的教材内容。 (2 ) 认真阅读和掌握本章相关内容的算法并设计程序序。 (3 ) 上机运行程序。 (4 ) 保存和打印出程序的运行结果,并结合程序进行分析。
(2 ) 认真阅读和掌握本章相关内容的程序。
(3 ) 上机运行程序。 (4 ) 保存和打印出程序的运行结果,并结合程序进行分析。
(5 ) 按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果
实验代码:
1)头文件模块
#include iostream.h>//
头文件
#include<malloc.h>// 库头文件 ----- 动态分配内存空间
建立单链表,由用户输入各结点 data 域之值,
// 以 0 表示输入结束
{
elemtype d;//
定义数据元素 d
nodetype *h=NULL,*s,*t;//
定义结点指针
int i=1;
cout<<" 建立一个单链表 "<<endl; while(1)
{
cout <<"
输入第 "<< i <<" 结点 data 域值: ";
在单链表 head 中第 i 个节点
{
nodetype *p,*s;
s=(nodetype*)malloc(sizeof(nodetype));//
创建节点 s
s->data=x;s->next=NULL;
if(i==0)//i=0:s
作为该单链表的第一个节点
{
s->next=h;h=s;
}
else
号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;
左右括号匹配正确。
(4 ) 设计一个测试主函数进行测试。
(5 ) 对程序的运行结果进行分析。 实验代码:
#include <stdio.h > #define MaxSize 100
typedef struct
{
int data[MaxSize];
定义节点指针变量
head=create();//
创建一个单链表
disp(head);//
输出单链表
cout<<" 单链表长度 :"<<len(head)<<endl;
ins(head, 2,0);//
在第二个节点之后插入以 0 为元素的节点
disp(head);//
输出新链表
del(head,2);//
数据结构实验报告全集
实验一 线性表基本操作和简单程序
1 . 实验目的 (1 )掌握使用 Visual C++ 6.0
上机调试程序的基本方法;
(2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和 链表存储结构上的程序设计方法。
2 . 实验要求 (1 ) 认真阅读和掌握和本实验相关的教材内容。
}
int Gettop(SqStack *st) //
获得栈顶元素
{
if(st->top==-1)
{
printf("
栈空 \n");
return 0;
}
else
return st->data[st->top];
}
void Display(SqStack *st) //
打印栈里元素
{
int i;
printf(" 栈中元素: ");
int top;
}SqStack;
void InitStack(SqStack *st) //
初始化栈
{
st->top=-1;
}
int StackEmpty(SqStack *st) //
判断栈为空
{
return (st->top==-1);
}
void Push(SqStack *st,int x) //
for(i=st->top;i>=0;--i)
printf("%d ",st->data[i]);
printf("\n");
}
int main() // 测试
{
SqStack L;
SqStack *st=&L;
InitStack(st);
printf(" 栈空: %d\n",StackEmpty(st));
if(p==NULL)cout<<" 空表 ";
while(p!=NULL)
{
cout<<p->data<<" ";p=p->next;
}
cout<<endl;
}
4)计算单链表的长度
int len(nodetype *h)//
返回单链表的长度
{
int i=0;
nodetype *p=h;
while(p!=NULL)
for(int i=1;i<10;++i)
Push(st,i);
Display(st);
printf(" 退一次栈 \n");
Pop(st);
printf(" 栈顶元素 :%d\n",Gettop(st));
Pop(st);
Display(st);
return 0;
}
实验结果:
实验三 串的基本操作和简程序
元素进栈
{
if(st->top==MaxSize-1)
printf("
栈上溢出 !\n");
else
{
st->top++;
st->data[st->top]=x;
}
}
void Pop(SqStack *st) // 退栈
{
if(st->top==-1)
printf("
栈下溢出 \n");
else
st->top--;
只有一个节点的情况
else
{
while (pb!=NULL)//
有两个及以上节点的情况
{
free(pa);pa=pb;pb=pb->next;
}
free(pa);
}
}
}
9) 主程序模块 :
#include"slink.h"//
包含头文件 slink
void main()
{
nodetype *head;//
{
p=p->next;i++;
}
return i;
}
5)寻找第 i 个节点 nodetype *find(nodetype *h,int i)//
返回第 i 个节点的指针
{
nodetype *p=h;
int j=1;
if(i>len(h)||i<=0)
return NULL;//i
上溢或下溢 c
else
实验代码: #include<stdio.h> #define MaxSize 50 typedef struct {
char data[MaxSize]; //
存放字符串
int length; // }SqString;
字符串长度
// 将一个字符串常量赋给串 s
void StrAssign(SqString &s,char cstr[])
{p=find(h,i);//
查找第 i 个节点,并由 p 指向该节点
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
return h;
}
}
7)单链表的删除操作
nodetype *del(nodetype *h,int i)//
删除第 i 个节点
{
nodetype *p=h, *s;
cin >> d;
if(d==0) break;//
以 0 表示输入结束
if(i==1)//
建立第一个结点
{
h=(nodetype*)malloc(sizeof(nodetype));//
表示指针 h
h->data=d;h->next=NULL;t=h;//h
是头指针
}
else// 建立其余结点
{
s=(nodetype*) malloc(sizeof(nodetype));
{
int i;
for(i=0;cstr[i]!='\0';i++) //
这个 '\0' 代表字符串结
束标志 , 编译系统自动加上的
s.data[i]=cstr[i];
s.length=i;
}
// 字符串的复制 void StrCopy(SqString &s,SqString t)
{
int i;
for(i=0;i<t.length;i++)
s->data=d;s->next=NULL;t->next=s;
t=s;//t
始终指向生成的单链表的最后一个节点
}
i++;
}
return h;
}
3)输出单链表中的元素
void disp(nodetype*h)// {
输出由 h 指向的单链表的所有 data 域之值
nodetype *p=h;
cout<<" 输出一个单链表 :"<<endl<<" ";
typedef int elemtype;//
定义数据域的类型
typedef struct linknode//
定义结点类型
{Fra Baidu bibliotek
elemtype data;//
定义数据域
struct linknode *next;//
定义结点指针
}nodetype;
2)创建单链表
nodetype *create()//
(3 ) 保存和打印出程序的运行结果,并分析程序的运行结果。
3. 实验内容 利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程
序。具体完成如下:
(1 ) 定义栈的顺序存取结构。
(2 ) 分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。
(3 ) 定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括
123456789
单链表长度: 9
输出一个单链表:
1023456789
输出一个单链表:
12345678
实验二 顺序栈的实现
1. 实验目的 掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程
序实现方法。
2. 实验要求
(1 ) 认真阅读和掌握和本实验相关的教材内容。
(2 ) 分析问题的要求,编写和调试完成程序。
free(s);
}
else cout<<"
输入 i 的值不正确 "<<endl;
}
return h;
}
8)释放节点空间
void dispose(nodetype *h)//
释放单链表的所有节点占用的空间
{
nodetype *pa=h,*pb;
if(pa!=NULL)
{
pb=pa->next;
if(pb==NULL)// free(pa);
{
while (p!=NULL&&j<1)//
查找第 i 个节点,并由 p 指向该节点
{
j++;p=p->next;
}
return p;
}
}
6)单链表的插入操作
nodetype *ins(nodetype *h,int i,elemtype x)// // ( i>=0 )之后插入一个 data 域为 x 的节点
{
printf(" }
此字符串长度为: %d\n",s.length);
// 合并字符串
SqString Concat(SqString s,SqString t)
{
SqString str;
int i;
str.length=s.length+t.length;
for(i=0;i<s.length;i++)
删除第二个节点
disp(head);//
输出新链表
} 5.实验结果 建立一个单链表: 输入第 1 结点 data 域值: 1 输入第 2 结点 data 域值: 2 输入第 3 结点 data 域值: 3 输入第 4 结点 data 域值: 4 输入第 5 结点 data 域值: 5 输入第 6 结点 data 域值: 6 输入第 7 结点 data 域值: 7 输入第 8 结点 data 域值: 8 输入第 9 结点 data 域值: 9 输入第 10 结点 data 域值 0: 输出一个单链表:
s.data[i]=t.data[i];
s.length=t.length;
printf(" 字符串复制成功了 \n");
}
// 判断字符串是否相等
void StrEqual(SqString s,SqString t) { int i,same=1; if(s.length!=t.length)
str.data[i]=s.data[i];
int j=1;
if(i==1)//
删除第 1 个节点
{
h=h->next;free(p);
}
else
{
p=find(h,i-1);//
查找第 i-1 个节点,并由 p 指向该节点
if(p!=NULL&&p->next!=NULL)
{
s=p->next;//s
指向要删除的节点
p->next=s->next;
same=0; else { for(i=0;i<s.length;i++)
if(s.data[i]!=t.data[i]) { same=0; break; }
} if(same==0) printf(" 这两个字符串不相等 \n"); else printf(" 这两个字符串相等 \n"); } // 字符串的长度 void StrLength(SqString s)
相关文档
最新文档