当前位置:首页 » 操作系统 » 后插算法

后插算法

发布时间: 2022-11-28 13:05:38

⑴ 在单链表中第i个节点后插入q的算法步骤是什么

#include <stdio.h>
#define NULL 0
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
struct node *creat()
{
struct node *head=NULL,*p1,*p2;
int n=0;
p1=p2=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->num);
while(p1->num!=NULL)
{
n++;
if(n==1)head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}
void put(struct node *head)
{
struct node *p;
p=head;
if(head!=NULL)
while(p!=NULL)
{
printf("%d",p->num);
p=p->next;
}
}
struct node *insert(struct node *head,struct node *stu)
{
struct node *p1,*p2,*p0;
p0=stu;
p1=head;
if(head==NULL)
{
head=p0;p0->next=NULL;
}
else
{
while((p0->num>p1->num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num)
{
if(head==p1)
{
head=p0;
}
else
{
p2->next=p0;
}
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
return head;
}
struct node *del(struct node *head,long num)
{
struct node *p1,*p2;
if(head==NULL)
printf("\nlist null!\n");
p1=head;
while(p1->next!=NULL&&p1->num!=num)
{
p2=p1;
p1=p1->next;
}
if(p1->num==num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("delete:%ld\n",num);
}
else
printf("%ld not been found!\n",num);
return head;
}

void main()
{
struct node *head,*stu;
long num;
printf("Please input the number:\n");
head=creat();
put(head);
printf("Please input the delete number:\n");
scanf("%ld",&num);
while(num!=0)
{
del(head,num);
put(head);
printf("Please input the delete number:\n");
scanf("%ld",&num);
}

printf("Please input the insert number:\n");
stu=(struct node *)malloc(sizeof (struct node));
scanf("%d",&stu->num);
while(stu->num!=0)
{
head=insert(head,stu);
put(head);
printf("Please input the insert number:\n");
stu=(struct node *)malloc(sizeof (struct node));
scanf("%d",&stu->num);
}
}

给个程序给你,你看看1就知道了

⑵ 什么是插值算法

插值法又称“内插法”,是利用函数f (x)在某区间中插入若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。
1、Lagrange插值:
Lagrange插值是n次多项式插值,其成功地用构造插值基函数的 方法解决了求n次多项式插值函数问题;
★基本思想将待求的n次多项式插值函数pn(x)改写成另一种表示方式,再利 用插值条件⑴确定其中的待定函数,从而求出插值多项式。

2、Newton插值:
Newton插值也是n次多项式插值,它提出另一种构造插值多项式的方法,与Lagrange插值相比,具有承袭性和易于变动节点的特点;
★基本思想将待求的n次插值多项式Pn(x)改写为具有承袭性的形式,然后利用插值条件⑴确定Pn(x)的待定系数,以求出所要的插值函数。

3、Hermite插值:
Hermite插值是利用未知函数f(x)在插值节点上的函数值及导数值来构造插值多项式的,其提法为:给定n+1个互异的节点x0,x1,……,xn上的函数值和导数值
求一个2n+1次多项式H2n+1(x)满足插值条件
H2n+1(xk)=yk
H'2n+1(xk)=y'k k=0,1,2,……,n ⒀
如上求出的H2n+1(x)称为2n+1次Hermite插值函数,它与被插函数
一般有更好的密合度;
★基本思想
利用Lagrange插值函数的构造方法,先设定函数形式,再利
用插值条件⒀求出插值函数.

4、分段插值:
插值多项式余项公式说明插值节点越多,误差越小,函数逐近越好,但后来人们发现,事实并非如此,例如:取被插函数,在[-5,5]上的n+1个等距节点:计算出f(xk)后得到Lagrange插值多项式Ln(x),考虑[-5,5]上的一点x=5-5/n,分别取n=2,6,10,14,18计算f(x),Ln(x)及对应的误差Rn(x),得下表
从表中可知,随节点个数n的增加,误差lRn(x)l不但没减小,反而不断的增大.这个例子最早是由Runge研究,后来人们把这种节点加密但误差增大的现象称为Runge现象.出现Runge现象的原因主要是当节点n较大时,对应
的是高次插值多项式,此差得积累"淹没"了增加节点减少的精度.Runge现象否定了用高次插值公式提高逼近精度的想法,本节的分段插值就是克服Runge现象引入的一种插值方法.
分段多项式插值的定义为
定义2: a=x0<x1<…<xn=b: 取[a,b]上n+1个节点 并给定在这些节点 上的函数值f(xR)=yR R=0,1,…,n
如果函数Φ(x)满足条件
i) Φ(x)在[a,b]上连续
ii) Φ(xr)=yR,R =0,1,…,n
iii) Φ(x)zai 每个小区间[xR,xR+1]是m次多项式,
R=0,1,…,n-1则称Φ(x)为f(x)在[a,b]上的分段m次插值多项式
实用中,常用次数不超过5的底次分段插值多项式,本节只介绍分段线性插值和分段三次Hermite插值,其中分段三次Hermite插值还额外要求分段插值函数Φ(x)
在节点上与被插值函数f(x)有相同的导数值,即
★基本思想将被插值函数f〔x〕的插值节点 由小到大 排序,然后每对相邻的两个节点为端点的区间上用m 次多项式去近似f〔x〕.
例题
例1 已知f(x)=ln(x)的函数表为:
试用线性插值和抛物线插值分别计算f(3.27)的近似值并估计相应的误差。
解:线性插值需要两个节点,内插比外插好因为3.27 (3.2,3.3),故选x0=3.2,x1=3.3,由n=1的lagrange插值公式,有
所以有,为保证内插对抛物线插值,选取三个节点为x0=3.2,x1=3.3,x2=3.4,由n=2的lagrange插值公式有
故有
所以线性插值计算ln3.27的误差估计为
故抛物线插值计算ln3.27的误差估计为:
显然抛物线插值比线性插值精确;

5、样条插值:
样条插值是一种改进的分段插值。
定义 若函数在区间〖a,b〗上给定节点a=x0<x1<;…<xn=b及其函数值yj,若函数S(x)满足
⒈ S(xj)=yj,j=0,1,2,…,n;
插值法主要用于道路桥梁,机械设计,电子信息工程等 很多工科领域的优化方法。

⑶ 双向链表p点后插入节点的算法

双向链表节点:\r\ntypedef struct LinkNode\r\n{\r\n struct LinkNode * pre;\r\n\r\n struct LinkNode *next;\r\n\r\n int data;\r\n\r\n}node;\r\nsrand()\r\nrand()\r\n产生随机数插入到链表\r\n然后你可以网络一下直接插入排序算法,修改指针指向完成排序\r\n\r\n单链表:\r\ntypedef struct LinkNode\r\n{\r\n struct LinkNode *next;\r\n\r\n int data;\r\n\r\n}\r\n方法同上,\r\n自己动手做一下,有助于提高。其实动起手来很简单的,不要想的太复杂

⑷ 设有一个顺序表,写出其值为x的元素后插入m个元素的算法

Listlist=newList(,,,,,);intplace=;

⑸ 一单链表中,在X之后插入一个结点i的算法

你的问题都不清楚啊?
在位置X还是在值X后插呢??
这个算法狠简单的,书上也有
具体就是先查找 ..
找到X之后申请空间,然后链入表中,后插的话就X->next=i..你能看懂吧
找X就用写的查找函数,基本操作应该了解吧
list* Search(int X,list *s);就是在链表s里面找这个X,,具体看你的要求,是要X是个值呢?还是个地址,比如第X个数据后面插.
如果地址就申请个临时变量
int temp=0;
然后while()循环,s不为空一直往下指,然后temp++知道temp==X;
break后返回该地址的指针.就是返回当前的s.
嘎嘎努力啦!其实很简单滴兄弟,只要用心就OK~

⑹ 已知具有N个数据元素的线性单链表L,利用单链表后插入算法,在L中第i个位置插入数据元素x

int j=1; p=head; while(j<i && p->next) { p=p->next; j++; } if(j==i) { q=new node(e); q->next=p->next; p->next=q; } else { printf("链表没有%d个元素",i); }

⑺ C语言,这个插入结点的算法,我想令i=3,插入在第2个结点的后边,代码的意思也是先找到第i-1个结

书上最后一句话打错了,应该是把p插入到q的后面,步骤为p->next=q->next; q->next=p。
另外q的确指向第i-1个结点。当循环到第i个结点时,循环结束,不会执行q=q->next。

⑻ 顺序表可以头插吗为什么书上只讲在某一元素之后插入的算法

顺序表一般是从所分配内存的起始地址开始存储的,第0个元素前的空间一般是未分配的,所以无法进行头插

⑼ 设有一个顺序表,写出在值为x的元素后插入m个元素的算法。

struct list *p, *q, *s, *head;
p = head;
while(p != NULL)
{
if(x > p->data)
{
q = p;
p = p->next;
}
else
{
s = (struct list*)malloc(sizeof(struct list));
s->data = x;
q->next = s;
s->next = p;
}
}

⑽ 后序插入算法程序中*p=m的作用是什么

*p=m,就是将该地址的内容修改等于m的内容。
十种常见排序算法可以分为两大类:
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

热点内容
扁桃玩的服务器地址 发布:2025-05-17 12:18:25 浏览:507
u盘上传歌 发布:2025-05-17 12:14:51 浏览:612
入门c语言设计 发布:2025-05-17 12:08:31 浏览:41
c3算法 发布:2025-05-17 12:04:19 浏览:364
phprecv 发布:2025-05-17 11:55:00 浏览:611
福建时钟监控网关服务器云主机 发布:2025-05-17 11:54:28 浏览:248
c数据库压缩 发布:2025-05-17 11:39:22 浏览:960
安卓手机如何连接音响功放 发布:2025-05-17 11:37:48 浏览:959
破解exe加密视频 发布:2025-05-17 11:23:41 浏览:976
我的世界服务器圈太大了怎么办 发布:2025-05-17 11:15:21 浏览:615