当前位置:文档之家› 大连理工大学数据结构(一)上机作业答案——张老师

大连理工大学数据结构(一)上机作业答案——张老师

int i,n;
n=L.length;
for(i=0;i<n;i++)
printf("%2d",L.elem[i]);
}
//顺序表逆置
void ReverseList_Sq(SqList &L){
int i,n;
ElemType p;
n=L.length;
for(i=0;i<n/2;i++)
{
p=L.elem[i];
p++;
*p = '\0';
} //将字符串结尾附成\0
int Precede(char c)
{
if (c == '*' || c == '/')
return 2;
if (c == '+' || c == '-')
return 1;
if (c == '(' || c == ')')
return -1;
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");
printf("单链表就地逆置请按4.\n");
printf("删除大于mink且小于maxk的所有元素请按5.\n");
printf("退出请按0.\n");
printf("*********************************\n");
ListOutput_Sq(L);
printf("\n");
}
2.从键盘读入n个整数(升序),请编写算法实现:
(1)CreateList():建立带表头结点的单链表;
(2)PrintList():显示单链表,(形如:H->10->20->30->40);
(3)InsertList():在有序单链表中插入元素x;
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){
scanf("%d",&e);
InsertList(L,e);
PrintList(L);
break;
case 4:
printf("要执行本操作请先建立单链表,请输入单链表中的节点个数:");
scanf("%d",&n);
CreateList(L,n);
printf("单链表逆置:");
ReverseList(L);
PrintList(L);
break;
}
}while(number!=0);}
第二次作业
栈采用顺序栈存储,试设计算法实现将表达式转换成后缀表达式输出。
例如,输入表达式:a+b/c-(d*e+f)*g
输出其后缀表达式:abc/+de*f+g*-
参考答案:
#include<stdio.h>
#include<stdlib.h>
#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){
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){
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");
PrintList(L);
break;
case 5:
printf("要执行本操作请先建立单链表,请输入单链表中的节点个数:");
scanf("%d",&n);
CreateList(L,n);
printf("请输入mink和maxk:");
scanf("%d%d",&mink,&maxk);
DeleteList(L,mink,maxk);
void add(char exp[])
{
char *p;
p = exp;
while (*p != '\0')
++p;
*p = '#';
*(p + 1) = '\0';
}//在表达式结尾加结束符
void del(char suffix[])
{
char *p;
p = suffix;
while (*p != '#')
typedef char SElemType;
typedef char ElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;//定义结构
int InitStack(SqStack&S){
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
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){
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);
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;
LNode *p,*q,*s;
p=L;
q=L->next;
while(q&&q->data<m){
p=q;
q=q->next;
}
if(q){
相关主题