《6数据结构C#版链队和顺序栈的实验报告及其代码.pdf》由会员分享,可在线阅读,更多相关《6数据结构C#版链队和顺序栈的实验报告及其代码.pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实 验 报 告课程名称:数据库结构与数据库应用基础教程系部名称:专业班级:学生姓名:学号:指导教师:实验项目顺序栈和链队实验日期2015-11-15实验地点实验楼 606同组人数4实验类型 传统实验 现代实验 其他 验证性 综合性 设计性 其他 自立式 合作式 研究式 其他一、一、实验目的实验目的1.用控制台应用程序和用控制台应用程序和 Windows 窗体应用程序实现顺序栈的获取栈的长度,入窗体应用程序实现顺序栈的获取栈的长度,入栈,出栈,获取栈顶元素的操作。栈,出栈,获取栈顶元素的操作。2.用控制台应用程序和用控制台应用程序和 Windows 窗体应用程序实现顺序栈的链队的长度窗体应用程序
2、实现顺序栈的链队的长度,入栈入栈,出栈,获取栈顶元素的操作。出栈,获取栈顶元素的操作。二、实验仪器设备二、实验仪器设备硬件:硬件:AcerE5-571G-56AJ操作系统:操作系统:Winsows10软件:软件:Microsoft Visual Studio 2010二、二、实验实验原理、原理、内容内容及及步骤步骤顺序栈:1.创建一个控制台应用,再添加接口和类。2.在主方法下面实现添加顺序栈的操作,用push实现,其实就是一次性的把全部数据入栈的操作。3.然后用switch case语句实现“求长度,入栈,出栈,获取栈顶元素”的操作。4.在做窗体的时候就是根据控制台来做,但是在做窗体的时候没用
3、“判满,判空”,而是用messagebox,show()提示输入异常的方法。(相当于判空的操作)(相当于判满的操作)链队:1.创建一个控制台应用,再添加接口和类。2.在主方法下面实例化创建一个新的链队,用的是一个一个入队的方法,再进行其他的操作。3.同样的用switch case语句实现“求长度,入队,出队,获取头结点”的操作。4.链队的窗体和顺序栈的窗体基本一样,都是根据控制台来做,不过没用“判空。判满”。也是用messagebox.show()来表示。(相当于判空的操作)(相当于判满的操作)四四、实验中存在、实验中存在的问题的问题、解决方法及进一步的想法等、解决方法及进一步的想法等1.顺序
4、栈的控制台应用程序是借用了顺序栈的代码实现的,特别是用.PrintAllElem实现打印输出工作。2.在做窗体的时候发现每个button按钮下面都要用string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(inti=0;i b.Length;i+.Push(Convert.ToInt32(bi);如果只用一个根本不能实现,而且因为是顺序栈,不能只写一个而来调用此段代码,需要在每个按钮下面都书写。3.在做链队控制台的时候,最开始是用把数字用追加进去的方法,后来总是实现不了,就改用入队的方法添加数字的方法4.因
5、为知道链队可以用调用的方法,所以就打算写一个代码表示输入的链队,然后每个按钮再调用来实现相关的操作,但是没有找到相关的资料,所以没实现。最后还是使用了顺序栈的方法,在每个button按钮下面用string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i b.Length;i+.Push(Convert.ToInt32(bi);的方法。五五、教师评语、教师评语成成绩绩指导教师签字:指导教师签字:年年月月日日注:1、此报告为参考格式,各栏项目可根据实际情况进行调整;2、实验成绩以优(90100)、
6、良(8089)、中(7079)、及格(6069)、不及格(60 以下)五个等级评定。附录(因为窗体和控制台中的类和接口一样,所以省略部分窗体部分的代码。)using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication7public interface IStackint GetLength();/求栈的长度bool IsEmpty();/判断栈是否为空void Clear();/清空操作void Push(T item);/入栈操作T P
7、op();/出栈操作T GetTop();/取栈顶元素using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication7public class SeqStack:IStackprivate int maxsize;/顺序栈的容量private T data;/数组,用于存储顺序栈中的数据元素private int top;/指示顺序栈的栈顶/索引器public T thisint indexgetreturn dataindex;setd
8、ataindex=value;/容量属性public int Maxsizegetreturn maxsize;setmaxsize=value;/栈顶属性public int Topgetreturn top;/构造器public SeqStack(int size)data=new Tsize;maxsize=size;top=-1;/求栈的长度public int GetLength()return top+1;/清空顺序栈public void Clear()top=-1;/判断顺序栈是否为空public bool IsEmpty()if(top=-1)return true;else
9、return false;/判断顺序栈是否为满public bool IsFull()if(top=maxsize-1)return true;elsereturn false;/入栈public void Push(T item)if(IsFull()Console.WriteLine(Stack is full);return;data+top=item;/出栈public T Pop()T tmp=default(T);if(IsEmpty()Console.WriteLine(Stack is empty);return tmp;tmp=datatop;-top;return tmp;
10、/获取栈顶数据元素public T GetTop()if(IsEmpty()Console.WriteLine(Stack is empty!);return default(T);return datatop;public void PrintAllElem()/判断是否为空表if(IsEmpty()Console.WriteLine(顺序栈中不存在数据元素,无法执行打印操作!);/执行打印操作elseConsole.WriteLine(打印顺序栈中的数据元素:n);for(int i=0;i=top;i+)Console.Write(datai+);Console.WriteLine();
11、internal object Pop(int pos)throw new NotImplementedException();internal object boolIsEmpty()throw new NotImplementedException();using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication7class Programstatic void Main(string args)Console.Write(请输入顺
12、序栈的长度:);int b=Convert.ToInt32(Console.ReadLine();/创建并实例化顺序表类,为了方便演示,此处使用整数SeqStack SL=new SeqStack(b);/为了方便演示,此处直接使用 5 作为表最大容量Console.Write(请输入序顺序栈 La 的第 1 个成员:);/把输入的元素追加到序列表 La 中;string n=null;doint m=Convert.ToInt32(Console.ReadLine();if(SL.GetLength()+1 b)Console.WriteLine(您输入的顺序栈 La 的元素个数大于顺序栈
13、La 的容量!);Console.ReadKey();break;SL.Push(m);Console.Write(是否继续为顺序栈 La 加入成员:(是:y,否:n));n=Console.ReadLine();if(n=y)Console.Write(请输入顺序栈 La 新加入的成员:);while(n=y);/保存用户输入的值的变量string input;int pos;int num;while(true)Console.WriteLine(请输入要执行的操作);Console.WriteLine(1.获取栈的长度);Console.WriteLine(2.入栈);Console.W
14、riteLine(3.出栈);Console.WriteLine(4.获取栈顶元素);input=Console.ReadLine();switch(input)case 1:Console.WriteLine(当 前 顺 序 栈 的 长 度:0,SL.GetLength();break;case 2:Console.WriteLine(请输入一个数入栈:);if(int.TryParse(Console.ReadLine(),out num)SL.Push(num);SL.PrintAllElem();break;case 3:Console.WriteLine(在顺序栈的顶部出栈,SL.P
15、op();SL.PrintAllElem();break;case 4:Console.WriteLine(获取栈顶元素;0,SL.GetTop();break;public static SeqStack Empty get;set;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namesp
16、ace WindowsFormsApplication9public partial class Form1:Formpublic Form1()InitializeComponent();/求长度private void button1_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入栈的最大长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入栈的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text)
17、;SeqStack ee=new SeqStack(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Text=Convert.ToString(ee.GetLength();/入栈private void button2_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入栈的最
18、大长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入栈的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);SeqStack ee=new SeqStack(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;if(ee.GetLength()!=0)MessageBox.Show
19、(顺序栈生成成功!,提示);textBox3.Text=textBox2.Text;/出栈private void button3_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入栈的最大长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入栈的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);SeqStack ee=new SeqStack(a);string d=textBox2.Text;ch
20、ar c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Clear();int z=ee.GetLength();for(int j=0;j z;j+)textBox3.Text+=Convert.ToString(ee.Pop()+;/获取栈顶元素private void button4_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入
21、栈的最大长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入栈的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);SeqStack ee=new SeqStack(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Clear();textBox3.Text=Co
22、nvert.ToString(ee.GetTop();private void button5_Click(object sender,EventArgs e)this.Close();(因为窗体和控制台的接口和类一样,所以就省略窗体部分的代码。)using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication8public interface IQueueint GetLength();/求队列的长度bool IsEmpty();/判断对
23、列是否为空void Clear();/清空队列void In(T item);/入队T Out();/出队T GetFront();/取对头元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication8public class Nodeprivate T data;/数据域private Node next;/引用域/构造器public Node(T val,Node p)data=val;next=p;/构造器public No
24、de(Node p)next=p;/构造器public Node(T val)data=val;next=null;/构造器public Node()data=default(T);next=null;/数据域属性public T Datagetreturn data;setdata=value;/引用域属性public Node Nextgetreturn next;setnext=value;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleA
25、pplication8public class LinkQueue:IQueueprivate Node front;/队列头指示器private Node rear;/队列尾指示器private int num;/队列结点个数/队头属性public Node Frontgetreturn front;setfront=value;/队尾属性public Node Reargetreturn rear;setrear=value;/队列结点个数属性public int Numgetreturn num;setnum=value;/构造器public LinkQueue()front=rear=
26、null;num=0;public int GetLength()return num;/清空链队列public void Clear()front=rear=null;num=0;/判断链队列是否为空public bool IsEmpty()if(front=rear)&(num=0)return true;elsereturn false;/入队public void In(T item)Node q=new Node(item);if(rear=null)rear=q;front=q;elserear.Next=q;rear=q;+num;/出队public T Out()if(IsEm
27、pty()Console.WriteLine(Queue is empty!);return default(T);Node p=front;front=front.Next;if(front=null)rear=null;-num;return p.Data;/获取链队列头结点的值public T GetFront()if(IsEmpty()Console.WriteLine(Queue is empty!);return default(T);return front.Data;using System;using System;using System.Collections.Gener
28、ic;using System.Linq;using System.Text;namespace ConsoleApplication8class Programstatic void Main(string args)LinkQueue SL=new LinkQueue();string input;int num;while(true)Console.WriteLine(请输入您要执行的操作编号:);Console.WriteLine(1.入队);Console.WriteLine(2.求长度);Console.WriteLine(3.出队);Console.WriteLine(4.获取链
29、队列头节点的值);input=Console.ReadLine();switch(input)case 1:Console.WriteLine(请输入一个数入链队:);string b=Console.ReadLine();char c=,;string d=new string20000;d=b.Split(c);for(int j=0;j d.Length;j+)SL.In(Convert.ToInt32(dj);break;case 2:Console.WriteLine(当前链队中的数据元素个数为:0,SL.GetLength();break;case 3:int a=SL.GetLe
30、ngth();for(int i=0;i a;i+)Console.WriteLine(出 链 队 的 第 0 个 值:1,i+1,SL.Out();break;case 4:Console.WriteLine(获取队头元素;0,SL.GetFront();break;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Win
31、dows.Forms;namespace WindowsFormsApplication9public partial class Form1:Formpublic Form1()InitializeComponent();private void button1_Click(object sender,EventArgs e)/入队private void button3_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入链队的最大长度!,提示);return;if(textBox2.Text=)Mes
32、sageBox.Show(请先输入链队的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);LinkQueue ee=new LinkQueue(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;if(ee.GetLength()!=0)MessageBox.Show(链队生成成功!,提示);textBox3.Text=textBox
33、2.Text;/出队private void button4_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入链队的最大长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入链队的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);LinkQueue ee=new LinkQueue(a);string d=textBox2.Text;char c=,;string b=new string100;b
34、=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Clear();int z=ee.GetLength();for(int j=0;j z;j+)textBox3.Text+=Convert.ToString(ee.Out()+;/获取头结点private void button5_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入链队的最大长度!,提示);return;if(textBox2.
35、Text=)MessageBox.Show(请先输入链队的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);LinkQueue ee=new LinkQueue(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Clear();textBox3.Text=Convert.ToString(ee.GetFront()
36、;/长度private void button2_Click(object sender,EventArgs e)if(textBox1.Text=)MessageBox.Show(请先输入链队最大的长度!,提示);return;if(textBox2.Text=)MessageBox.Show(请先输入链队的元素!,提示);return;int a=Convert.ToInt32(textBox1.Text);LinkQueue ee=new LinkQueue(a);string d=textBox2.Text;char c=,;string b=new string100;b=d.Split(c);for(int i=0;i a)MessageBox.Show(输入的元素个数大于顺序栈的容量!,提示);return;textBox3.Text=Convert.ToString(ee.GetLength();private void button1_Click_1(object sender,EventArgs e)this.Close();