北科大数据结构上机题代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北科大数据结构上机题代码

《数据结构》上机题

1、输入数据建立单链表,并求相邻两节点data值之和为最大的第一节点。

例如输入:26473 0,建立:

所求结果=4 程序结构:

类型说明;

建表函数:Creatlist(L); 求值函数:Adjmax(L);

main( )

{ 变量说明;

调用Creatlist(L)建表;调用Adjmax(L)求值;

打印数据;释放链表空间;

Y

继续?

N

停止 } 上机题1:

#include #include typedef int datatype;

//设当前数据元素为整型 typedef struct node

//节点类型 { datatype data;

//节点的数据域

struct node *next;

//节点的后继指针域 }Linknode,*Link;

//linknode为节点说明符,link为节点指针说明符 Link Createlist()

//创建单链表的算法 { int a,c;float b; Link H,P,r;

//H,P,r分别为表头,新节点和表尾节点指针

H=(Link)malloc(sizeof(Linknode)); //建立头节点 r=H; do

{ c=(fflush(stdin),scanf(\ //判断输入的是否是整数

a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||adata=a;

//存入数据 r->next=P;

//新节点链入表尾

r=P; do { c=(fflush(stdin),scanf(\ //判断输入的是否是

整数 a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||anext=NULL;

//将尾节点的指针域置空 return(H);

//返回已创建的头节点 } Link Adjmax(Link H)

//求链表中相邻两节点data值之和为最大的第一节点的指针

的算法 { Link p,p1,q; int i,j; p=p1=H->next; if(p1==NULL) return(p1); //表空返回 q=p->next; if(q==NULL)

return(p1); //表长=1时返回 i=p->data+q->data;

//相邻两节点data值之和 while(q->next)

{ p=q;q=q->next;

//取下一对相邻节点的指针

j=p->data+q->data; if(j>i)

{

p1=p;

i=j;

//取和为最大的第一节点指针

} } return (p1); } void main()

//主函数 { Link A,B,p,q; int a,b; do { printf(\请输入一组整数(以0为结束符,数之间回车):\\n\ p=A=Createlist();

//创建新链表 B=Adjmax(A);

//求链表中相邻两节点data值之和为最大的第一节点的指针a=(int)(B->data);

//取第一节点的data值

printf(\第一节点的data值为:%d\\n\ while(p->next)

//释放链表空间

{

q=p;

p=p->next;

free(q);

} free(p); printf(\是否继续输入下一组整数:是:1,

否:0\\n\

scanf(\

}while(b); } 上机题

2、实现算术表达式求值程序。

设操作数:0,1,2,,8,9;

运算符:+,2)*3 #,将其转换成后缀表达式:542—3*+#,然后计算,本例结果为11。

程序结构:

类型说明;两套:Clearstack(S)、Emptystack(S)、Getstop(S)、 Push(S)、Pop(S);

中缀到后缀转换的函数:Mid-post(E[n],B[n]);

后缀表达式求值的函数:Postcount(B[n]);

main

{

变量说明;

输入中缀表达式,存入E[n];

调用Mid-post(E,B);

调用Postcount(B);

打印表达式结果;

Y

继续?

N

停止 } 上机题2:

#include #include #include typedef struct node { char data; struct node *next; }snode,*slink; typedef struct

node1 { int data; struct node1 *next; }snode1,*slink1;

void Clearstack(slink s)

//置栈空 { s=NULL; } int Emptystack(slink s)

//判断栈是否为空 { if(s==NULL)

return(1); //栈空返回1 else return(0);

//栈非空返回0 } char Getstop(slink s)

//取栈顶元素 { if(s!=NULL)

return (s->data);

return (0);

} void Push(slink*s,char x)

//元素x进栈 { slink p;

p=(slink)malloc(sizeof(snode)); //生成进栈p节点 p-

>data=x;

//存入新元素 p->next=*s;

//p节点作为新的栈顶链入 *s=p; } char Pop(slink*s)

//出栈 { char x; slink p; if(Emptystack(*s))

return (-1); //栈空,返回-1 else { x=(*s)->data; p=*s; *s=(*s)->next; free(p); return (x);

//成功 } } void Push1(slink1*s,int x)

//元素x进栈 { slink1 p;

p=(slink1)malloc(sizeof(snode1)); //生成进栈p节点 p-

>data=x;

相关文档
最新文档