最新大连理工大学数据结构(一)上机作业答案——张老师
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
q=q->next;
p->next=L->next;
L->next=p;
}
}
}
void DeleteList(LinkList &L,ElemType mink,ElemType maxk){
LNode *p=L,*q;
while(p->next&&p->next->data<=mink)
p=p->next;
1.将顺序表逆置,要求用最少的附加空间。
参考答案
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
int i;
LNode *p,*q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入所要建立的单链表所包含的元素:");
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//创建顺序表,插入元素
void ListInput_Sq(SqList &L){
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L,int n){
s->data=m;
s->next=NULL;
p->next=s;
}
}
void ReverseList(LinkList &L){
LNode *p,*q;
if(L->next&&L->next->next){
p=L->next;
q=p->next;
p->next=NULL;
while(q){
p=q;
p->next=NULL;
q->next=p;
q=p;
}
}
void PrintList(LinkList L){
LNode *p;
p=L->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
void InsertList(LinkList L,ElemType m){
int n,i;
printf("input the length of Sqlist:");
scanf("%d",&n);
L.length=n;
for(i=0;i<n;i++)
{
printf("input elem:");
scanf("%d",&L.elem[i]);
}
}
//输出顺序表中的元素
void ListOutput_Sq(SqList L){
q=p;
while(q&&q->data<maxk)
q=q->next;
p->next=q;
}
void main(){
LinkList L;
int n,number;
ElemType e,mink,maxk;
do{
printf("*********************************\n");
typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
//创建空顺序表
Status InitList_Sq(SqList &L){
LNode *p,*q,*s;
p=L;
q=L->next;
while(q&&q->data<m){
p=q;
q=q->next;
}
if(q){
s=(LinkList)malloc(sizeof(LNode));
s->data=m;
s->next=q;
p->next=s;
}
else{
s=(LinkList)malloc(sizeof(LNode));
int i,n;
n=L.length;
for(i=0;i<n;i++)
printf("%2d",L.elem[i]);
}
//顺序表逆置
void ReverseList_Sq(SqList &Байду номын сангаас){
int i,n;
ElemType p;
n=L.length;
for(i=0;i<n/2;i++)
{
p=L.elem[i];
ListOutput_Sq(L);
printf("\n");
}
2.从键盘读入n个整数(升序),请编写算法实现:
(1)CreateList():建立带表头结点的单链表;
(2)PrintList():显示单链表,(形如:H->10->20->30->40);
(3)InsertList():在有序单链表中插入元素x;
L.elem[i]=L.elem[n-i-1];
L.elem[n-i-1]=p;
}
}
void main(){
SqList L;
InitList_Sq(L);
ListInput_Sq(L);
ListOutput_Sq(L);
ReverseList_Sq(L);
printf("\n");
printf("输出结果为:");
printf("建立单链表请按1.\n");
printf("显示单链表请按2.\n");
printf("有序插入新元素请按3.\n");
(4)ReverseList():单链表就地逆置;
(5)DelList():在有序单链表中删除所有值大于mink且小于maxk的元素。
选作:使用文本菜单完成功能选择及执行。
参考答案:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
p->next=L->next;
L->next=p;
}
}
}
void DeleteList(LinkList &L,ElemType mink,ElemType maxk){
LNode *p=L,*q;
while(p->next&&p->next->data<=mink)
p=p->next;
1.将顺序表逆置,要求用最少的附加空间。
参考答案
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
int i;
LNode *p,*q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入所要建立的单链表所包含的元素:");
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//创建顺序表,插入元素
void ListInput_Sq(SqList &L){
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L,int n){
s->data=m;
s->next=NULL;
p->next=s;
}
}
void ReverseList(LinkList &L){
LNode *p,*q;
if(L->next&&L->next->next){
p=L->next;
q=p->next;
p->next=NULL;
while(q){
p=q;
p->next=NULL;
q->next=p;
q=p;
}
}
void PrintList(LinkList L){
LNode *p;
p=L->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
void InsertList(LinkList L,ElemType m){
int n,i;
printf("input the length of Sqlist:");
scanf("%d",&n);
L.length=n;
for(i=0;i<n;i++)
{
printf("input elem:");
scanf("%d",&L.elem[i]);
}
}
//输出顺序表中的元素
void ListOutput_Sq(SqList L){
q=p;
while(q&&q->data<maxk)
q=q->next;
p->next=q;
}
void main(){
LinkList L;
int n,number;
ElemType e,mink,maxk;
do{
printf("*********************************\n");
typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
//创建空顺序表
Status InitList_Sq(SqList &L){
LNode *p,*q,*s;
p=L;
q=L->next;
while(q&&q->data<m){
p=q;
q=q->next;
}
if(q){
s=(LinkList)malloc(sizeof(LNode));
s->data=m;
s->next=q;
p->next=s;
}
else{
s=(LinkList)malloc(sizeof(LNode));
int i,n;
n=L.length;
for(i=0;i<n;i++)
printf("%2d",L.elem[i]);
}
//顺序表逆置
void ReverseList_Sq(SqList &Байду номын сангаас){
int i,n;
ElemType p;
n=L.length;
for(i=0;i<n/2;i++)
{
p=L.elem[i];
ListOutput_Sq(L);
printf("\n");
}
2.从键盘读入n个整数(升序),请编写算法实现:
(1)CreateList():建立带表头结点的单链表;
(2)PrintList():显示单链表,(形如:H->10->20->30->40);
(3)InsertList():在有序单链表中插入元素x;
L.elem[i]=L.elem[n-i-1];
L.elem[n-i-1]=p;
}
}
void main(){
SqList L;
InitList_Sq(L);
ListInput_Sq(L);
ListOutput_Sq(L);
ReverseList_Sq(L);
printf("\n");
printf("输出结果为:");
printf("建立单链表请按1.\n");
printf("显示单链表请按2.\n");
printf("有序插入新元素请按3.\n");
(4)ReverseList():单链表就地逆置;
(5)DelList():在有序单链表中删除所有值大于mink且小于maxk的元素。
选作:使用文本菜单完成功能选择及执行。
参考答案:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1