文档详情

软件基础第一次上机作业.doc

发布:2018-10-08约3.85千字共6页下载文档
文本预览下载声明
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);
显示全部
相似文档