當前位置:首頁 » 操作系統 » 後插演算法

後插演算法

發布時間: 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),因此也稱為非線性時間比較類排序。
非比較類排序:不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間運行,因此也稱為線性時間非比較類排序。

熱點內容
隨機訪問方式 發布:2024-05-20 12:42:52 瀏覽:257
php判斷登陸 發布:2024-05-20 12:14:24 瀏覽:628
腳本精靈並且 發布:2024-05-20 11:39:40 瀏覽:266
綠盟登陸器單機怎麼配置列表 發布:2024-05-20 11:34:34 瀏覽:971
Android省電軟體 發布:2024-05-20 11:25:00 瀏覽:341
android鍵盤隱藏 發布:2024-05-20 11:23:40 瀏覽:523
瘋狂點擊的點擊腳本 發布:2024-05-20 11:09:06 瀏覽:686
飯團文件夾 發布:2024-05-20 10:56:18 瀏覽:575
win10系統重置密碼是多少 發布:2024-05-20 10:47:51 瀏覽:992
java加包 發布:2024-05-20 10:39:12 瀏覽:713