西电电院《软件技术基础》大作业以及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件技术基础大作业
02121060
薛学通
实验一线性表
一、实验目的
1.熟悉线性表的顺序和链式存储结构
2.掌握线性表的基本运算
3.能够利用线性表的基本运算完成线性表应用的运算
二、实验内容
1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n , e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。(文件夹:顺序表逆置、单链表逆置)
顺序表
源码:
//顺序表逆置.cpp
#include
#include
typedef char datatype;
const int maxsize=1024;
typedef struct
{ datatype data[maxsize];
int last;
}sequenlist;
void create(sequenlist*&);
void print(sequenlist*);
void invert(sequenlist*);
void main()
{
sequenlist*L;
create(L);//建立顺序表
print(L);//输出顺序表
invert(L);//调用顺序表逆值的函数
print(L);//输出顺序表
}
//建立顺序表
void create(sequenlist*&L)
{
L=(sequenlist*)malloc(sizeof(sequenlist));
L->last=0;
char ch;
while((ch=getchar())!='*')
{
L->data[L->last]=ch;
}
}
//输出顺序表
void print(sequenlist*L)
{
for(int i=1;i<=L->last;i++)
printf("%2c",L->data[i]);
printf("\n");
}
//添加顺序表逆置算法
void invert(sequenlist*L)
{
int n=L->last/2;
for(int i=1;i<=n;i++)
{
char temp=L->data[i];
L->data[i]=L->data[L->last-i+1];
L->data[L->last-i+1]=temp;
}
}
运行结果
单链表
源码:
#include
//单链表结构类型定义
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
void create(linklist*&);
void print(linklist *);
void invert(linklist*);
void main()
{
linklist*head;
create(head);
print(head);
invert(head);//调用单链表逆置的函数
print(head);
}
//采用尾插法建立具有头结点的单链表void create(linklist*&head)
{
char ch;
linklist *s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
while((ch=getchar())!='*')
{
s=(linklist*)malloc(sizeof(linklist));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
}
//输出单链表
void print(linklist *head)
{
linklist*p=head->next;
while(p!=NULL)
{
printf("%2c",p->data);
p=p->next;
}
printf("\n");
}
//单链表逆置
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;
}
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。(文件夹:分解单链表)
源码:
#include
#include
typedef char datatype;
typedef struct node
{ datatype data;
struct node *next;
}linklist;
void create(linklist*&);
void resolve(linklist*,linklist*,linklist*,linklist*);
void insert(linklist*,linklist*);
void print1(linklist*);
void print2(linklist*);
void main()
{ linklist *head,*letter,*digit,*other;
create(head);
print1(head);
letter=(linklist*)malloc(sizeof(linklist));//建立3个空循环链表