06054109何旭飞文档格式.docx
- 文档编号:22448975
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:45
- 大小:153.82KB
06054109何旭飞文档格式.docx
《06054109何旭飞文档格式.docx》由会员分享,可在线阅读,更多相关《06054109何旭飞文档格式.docx(45页珍藏版)》请在冰豆网上搜索。
intNo;
structpoint*next;
}LNode,*LinkList;
本程序包含3个函数:
①主函数main()
②生成单向循环链表create()
③实现报数问题search()
4.程序实现
#include"
stdlib.h"
stdio.h"
#defineNULL0
intn,m;
LinkListcreate()/*生成单向循环链表并返回*/
{inti;
LinkListhead,tail,new;
head=NULL;
printf("
\ninputn(总人数):
"
);
scanf("
%d"
&
n);
\ninputm:
&
m);
for(i=1;
i<
=n;
i++)
{new=(LinkList)malloc(sizeof(LNode));
new->
No=i;
if(head==NULL)/*链表的第一个结点插入*/
{head=new;
tail=head;
}
else/*链表的其余结点插入*/
{tail->
next=new;
tail=new;
}
tail->
next=head;
/*循环单链表的生成*/
returnhead;
voidsearch(LinkListhead)
{/*用循环链表实现报数问题*/
intcount,num;
LinkListpre,p;
num=0;
count=1;
p=head;
\noutputdata:
while(num<
n)
{do/*累计报数*/
{count++;
pre=p;
p=p->
next;
}while(count<
pre->
next=p->
/*报m的人出列*/
%3d"
p->
No);
free(p);
p=pre->
count=1;
num++;
main()
{LinkListhead;
clrscr();
head=create();
search(head);
getchar();
5.测试结果
inputn(总人数):
8
inputm:
3
outputdata:
36152847
6.实习心得
(略)
上机实训1:
何旭飞班级:
电信081日期:
11年03月26日
一元多项式的求导运算。
已知一个一元多项式,试设计一个程序对该多项式求导。
所设计的程序应实现如下基本功能:
1)输入一元多项式,建立与其对应的有序链表;
2)对多项式进行求导,建立并输出求导后的多项式。
要对一元多项式求导,首先要确定该一元多项式能否求导,即满足求导的要求,求导存在常数或一元不定式,如果仅有常数,是不能求导的,因为常数求导以后变为零,从节点中删除该节点。
如果是一元不定式与常数的混合,或者是一元多项式,都可以求导。
导数的运算原则如下:
常数的导数为零,xn的导数等于n*xn-1。
假设qa指向多项式的当前操作结点,则结点中各数据项的变化为:
1)若qa所指结点的指数项为0,求导以后应从多项式中删除该结点,释放qa。
2)若qa所指结点的指数项不为0,则求导以后,该结点的系数为该结点的
在这我们选择带头结点的单链表或单向循环链表存储多项式。
头结点的指数值为-1,系数项存放多项式的项数。
数据结构定义为:
typedefstructpnode
{floatcoef;
/*系数*/
intexp;
/*指数*/
structpnode*next;
}pnode,*polynode;
4.程序实现
实例一程序
#include“stdlib.h”//forvc6
{
floatcoef;
}pnode,*polynode;
voidcreatpolyn(polynodep,intm)
{/*输入m项的系数和指数,建立一元多项式的有序单链表*/
inti;
floatcoef;
intexp;
polynodetail,new;
p->
coef=m;
p->
exp=-1;
tail=p;
/*定义各变量建立单链表或单向循环链表存储多项式*/
for(i=1;
=m;
{
new=(polynode)malloc(sizeof(pnode));
/*重新分配存储空间*/
\ninputcoef(系数)andexp(指数):
%f%d"
coef,&
exp);
/*完成输入与输出的系数和指数*/
coef=coef;
exp=exp;
next=NULL;
tail=new;
单链表循环p
coefexpnew=tail→coefexptail->
next→coef(new)expnew=null
尾节点对应头结点
voidderivative(polynodep)
{/*对一元多项式的有序链表p求导*/
polynodepa,qa;
pa=p->
qa=p;
while(pa)
if(pa->
exp==0)/*从多项式中删除*pa结点并释放存储空间*/
qa->
next=pa->
free(pa);
coef--;
pa=qa->
else/*修改*pa结点的系数和指数*/
pa->
coef*=pa->
exp;
exp-=1;
qa=pa;
pa=pa->
}
voidprintpolyn(polynodep)
{/*打印输出一元多项式p*/
intn;
polynodeq;
q=p->
n=0;
while(q)
n++;
if(n==1)
{if(q->
exp==0)printf("
%.2f"
q->
coef);
elseif(q->
exp==1)
coef==1)printf("
x"
coef==-1)printf("
-x"
else{printf("
printf("
x^%d"
elseif(q->
-x^%d"
elseprintf("
%.2fx^%d"
coef,q->
}/*if(n==1)*/
+%.2f"
+x"
coef>
0)printf("
+%.2fx"
%.2fx"
+x^%d"
+%.2fx^%d"
q=q->
}/*while*/
}/*printpolyn*/
polynodep;
intm;
\ninputm(多项式的项数):
p=(polynode)malloc(sizeof(pnode));
creatpolyn(p,m);
\np(x)="
printpolyn(p);
derivative(p);
\np'
(x)="
实例一结果图形
程序输入系数和指数,求一元多项式的导数,并将其存储在单链表或单链循环链表中。
从而输出一元多项式以及它的导数多项式。
若多项式中含有常数,那么它的导数是零,程序将会删除导数后出现的零项,来释放链表中的空间,若不是常数,则求导后,会显示出来,在求导式中。
这个程序的单链表是以CEOF为头结点,NEW为尾节点,其中TAIL等于尾节点,尾节点的下一个是不存在的。
即NEW->
NEXT=NULL。
顺序存储的线性表的插入与删除操作。
在顺序循环存储表中插入或删除一个数据,通过输入函数来确定线性表中元素个数,以及插入元素或删除元素的位置。
1)建立线性表
2)从线性表插入一个元素
3)从线性表中删除一个元素
在这实验中,首先要确定输入元素的个数最大为多少,MAXSIZE<
=100。
pleaseinputthenumberforn\n"
n="
通过函数来确定输入的元素个数及其值是多少。
确定线性表中插入元素
intsq_insert(intlist[],int*p_n,inti,intx)
{intj;
if(i<
0||i>
*p_n)return
(1);
if(*p_n==MAXSIZE)return
(2);
for(j=*p_n+1;
j>
i;
j--)
list[j]=list[j-1];
list[i]=x;
(*p_n)++;
return(0);
/*删除线性表中的元素*/
intsq_delete(intlist[],int*p_n,inti)
=*p_n)return
(1);
for(j=i+1;
j<
=*p_n;
j++)
list[j-1]=list[j];
(*p_n)--;
如果输入元素不合条件,返回一,如果等于最大元素值,返回2,,否则进入FOR循环,输入元素x,则线性表元素右移一位。
然后返回元素个数,即(*p_n)++;
删除元素和插入元素相反,线性表元素左移一位,然后返回元素个数,即(*p_n)--;
Return(0)。
4.实例程序实现
实例二程序
#include<
stdio.h>
#defineMAXSIZE100
intlist[MAXSIZE];
/*在线性表中插入元素*/
intsq_insert(intlist[],int*p_n,inti,intx)
/*主程序*/
voidmain()
{inti,x,temp;
for(i=0;
i<
i++)
{printf("
list[%d]="
i);
list[i]);
Thelistbeforeinsertionis\n"
i++)printf("
%d"
list[i]);
\n"
pleaseinputthepositionwhereyouwanttoinsertavalue\nposition="
i);
pleaseinputthevalueyouwanttoinsert.\nx="
x);
temp=sq_insert(list,&
n,i,x);
switch(temp)
{case0:
Theinsertionissuccessful!
Thelistisafterinsertionis\n"
for(i=0;
%d\n"
n);
break;
case1:
case2:
Theinsertionisnotsuccessful!
/*deleting*/
Thelistbeforedeletingis\n"
pleaseinputthepositionwhereyouwanttodeleteavalue\nposition="
temp=sq_delete(list,&
n,i);
Thedeletingissuccessful!
Thelistisafterdeletingis\n"
Thedeletingisnotsuccessful!
"
5.测试结果
实例二结果图形
在插入或删除某个元素时,必须要注意删除或插入的元素在你输入的元素个数范围之内,插入值或删除值的大小则与元素个数无关。
程序会自动计算动作之后的元素个数,加一或则减一,以及新生成的序列,例如:
12334567,它的长度为7个元素,原序列右移一位。
而接下来的序列则是被选择删除了一个元素:
5。
新生成了一个新的序列,1333467,缺少了一个5,长度变为6,序列“12334567”左移一位。
上机实训2:
11年04月18日
1.实例一描述
通用数制转换程序:
将一个十进制数转换成其他进制的数。
2.实例一分析
常用的数制有:
二进制、八进制、十进制、十六进制。
数制转换就是利用“待转换数与相应的进制数反复相除,所得余数的逆置即为转换结果”的方法,本实例的功能就是将一个十进制数转换成其他进制的数。
假设待转换的十进制数为m,要转换成一个n进制的数,转换的具体方法如下:
1)用m除以n,得到相应的余数,将余数进栈stack(栈stack初始为空)。
2)用上一步所得的商再除以n,得到的余数继续进栈stack。
3)反复作
(2)直到商为0,将最后一次所得的余数也进栈。
4)对栈stack依次进行出栈操作,直至栈stack为空,所得结果即为转换结果。
栈是限定仅在表尾进行插入或删除操作的线性表。
假设栈S=(a1,a2,…,an),则称a1为栈底元素,an为栈顶元素。
栈中元素按a1,a2,…,an的次序进栈,退栈的第一个元素应为栈顶元素。
栈的修改是按后进先出的原则进行的。
因此,栈又称为后进先出的线性表。
利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。
栈的链式存储结构称为链栈。
链栈是不带头结点的单链表。
队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。
最早进入队列的元素最早离开。
在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。
假设队列为Q=(a1,a2,…,an),那么,a1就是队头元素素,an则是队尾元素。
队列中的元素是按照a1,a2,…,an的顺序进入的,退出队列也只能按照这个次序依次退出,为了克服顺序队列中“假溢出”,通常将一维数组Sq.elem[0]到Sq.elem.[MaxSize-1]看成是一个首尾相接的圆环,即Sq.elem[0]与Sq.elem.[maxsize-1]相接在一起。
这种形式的顺序队列称为循环队列。
当Sq->
front==Sq->
rear,则称为队空,当(Sq->
rear+1)modMaxSize=Sq->
front,则称为队满。
用链表表示的队列称为链队列,一个链队列显然需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。
为了操作方便,给链队列添加一个头结点,并令头指针指向头结点。
由此,空的链队列的判决条件为头指针和尾指针均指向头结点。
链队列的操作即为单链表的插入和删除操作的特殊情况,只是尚需修改尾指针或头指针。
#defineMAX50
charstack[MAX];
/*栈的类型定义为字符型*/
inttop=0;
/*初始化栈*/
voidpush(charx)/*进栈子函数*/
{if(top>
=MAX)
overflow"
else{
stack[top]=x;
/*进栈操作*/
top++;
charpop()/*出栈子函数,返回值类型为字符型*/
{if(top==0){
underflow"
return(NULL);
top--;
return(stack[top]);
intempty()/*判栈空子函数,空返回0,不空返回1*/
{if(top==0)
else
return
(1);
charfun(intx)/*整数转换成字符子函数*/
{chart;
switch(x){
case0:
t='
0'
;
1'
2'
case3:
3'
case4:
4'
case5:
5'
case6:
6'
case7:
7'
case8:
8'
case9:
10'
case10:
A'
case11:
B'
case12:
C'
case13:
D'
case14:
E'
case15:
F'
return(t);
/*将转换后的字符返回,以备进栈*/
{intm,n,x,t,r;
chary;
while
(1){/*可循环输入待转换数*/
pleaseinputtheoperation:
/*1为继续,0为退出*/
1iscontinue\t0ise
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 06054109