软件基础第一次上机作业.doc
文本预览下载声明
1、设有一个线性表E={e1, e2, … , en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en , en-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。(文件夹:顺序表逆置、单链表逆置)
线性表:#includestdio.h
#includemalloc.h
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);
printf(建立的顺序表是:);
print(L);
invert(L);
printf(逆置后的顺序表是:);
print(L);
}
void create(sequenlist*L)
{
L=(sequenlist*)malloc(sizeof(sequenlist));
L-last=0;
printf(请输入数据:);
char ch;
while((ch=getchar())!=\n)
{
L-last++;
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 stdio.h
#include stdlib.h
#include malloc.h
typedef struct node
{
int data;
struct node *next;
}LinkNode, *LinkList;
LinkList Creat(LinkList head);
void Inverse(LinkList head);
void Output(LinkList head);
LinkList Creat(LinkList head)//头插法建表
{
char ch;
LinkList p = NULL;
LinkList q = NULL;
head = (LinkList) malloc (sizeof(LinkNode));
head-next = NULL;
q = head;
while ((ch=getchar())!=\n)
{
p = (LinkList) malloc (sizeof(LinkNode));
p-data=ch;
p-next=q-next;
q-next = p;
}
return head;
}
void Inverse(LinkList head)//逆置
{
LinkList p = head-next;
LinkList tmp = NULL;
head-next = NULL;
while (p!=NULL )
{
tmp = p-next;
p-next = head-next;
head-next = p;
p = tmp;
}
}
void Output(LinkList head)//输出
{
LinkList p = head-next;
while (p!= NULL)
{
printf(%d , p-data);
p = p-next;
}
printf(\n);
}
int main(void)
{
LinkList head = NULL;
head = Creat(head);
printf(建立的单链表是:);
Output(head);
Inverse(head);
printf(逆置后的单链表是:);
Output(head);
system(pause);
显示全部