西电数据结构大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:数据结构上机报告学院:电子工程学院

专业:信息对抗技术

学生姓名:***

学号:***********

西安电子科技大学

数据结构课程实验报告实验名称线性表

电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092

同作者

实验日期 2017 年 3 月 18 日

实验一线性表

一、实验目的

1.熟悉线性表的顺序和链式存储结构

2.掌握线性表的基本运算

3.能够利用线性表的基本运算完成线性表应用的运算

二、实验要求

1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。

三、设计思路

1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。

2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。

四、运行结果

1.单链表逆置:

顺序表逆置:2.分解单链表

五、实验总结

线性表和单链表是最简单的、最常用的数据结构类型,是实现其他数据结构的基础,熟悉对它们的操作有助于后面对数据结构课程的学习和理解。

附录:

单链表逆置代码如下:

//单链表逆置主文件.cpp

#include

#include

#include"单链表结构类型定义.h"

#include"建立单链表.h"

#include"输出单链表.h"

#include"单链表逆置.h"

void main()

{

linklist*head;

creat(head);

print(head);

invert(head);//调用单链表逆置的函数

print(head);

}

//单链表结构类型定义.h

typedef char datatype;

typedef struct node

{

datatype data;

struct node *next;

}linklist;

//建立单链表.h

void creat(linklist*&head)

//采用尾插法建立具有结点的单链表{

char ch;

linklist *s,*r;

head=new linklist;

r=head;

while((ch=getchar())!='*')

{

s=new linklist;

s->data=ch;

r->next=s;

r=s;

}

r->next=NULL;

}

//输出单链表.h

void print(linklist *head)

{

linklist*p=head->next;

while(p!=NULL)

{

cout<data<<" ";

p=p->next;

}

cout<

}

//单链表逆置.h

void invert(linklist*head)

{

linklist*p,*q,*r;

p=head->next;

q=p->next;

while(q!=NULL)

{

r=q->next;

q->next=p;

p=q;

q=r;

}

head->next->next=NULL;

head->next=p;

}

顺序表逆置代码如下:

//顺序表逆置主文件.cpp

#include

#include

#include"顺序表结构类型定义.h" #include"建立顺序表.h"

#include"输出顺序表.h"

#include"顺序表逆置.h"

void main()

{

sequenlist*L;

creat(L);

print(L);

invert(L);//调用顺序表逆值的函数 print(L);

}

//顺序表的结构类型定义.h

typedef char datatype;

const int maxsize=1024;

typedef struct

{ datatype data[maxsize];

int last;

}sequenlist;

//建立顺序表.h

void creat(sequenlist*&L)

{

L=new sequenlist;

L->last=0;

char ch;

while((ch=getchar())!='*')

{

L->data[L->last]=ch;

L->last++;

}

}

相关文档
最新文档