西电电院《软件技术基础》大作业以及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个空循环链表

相关文档
最新文档