導航:首頁 > 源碼編譯 > 插入演算法

插入演算法

發布時間:2022-01-13 14:47:31

㈠ 跪求分別寫一個線性表的插入的完整演算法

//Try:
#include<iostream>
#include<stdlib.h>
usingnamespacestd;

#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2

typedefintStatus;//Status是函數的類型,其值是函數結果狀態碼
typedefintElemType;//ElemType為數據元素,暫定為int型

#defineLIST_INIT_SIZE100//線性表存儲空間的初始分配量
#defineLIST_INCREMENT10//線性表存儲空間的分配增量

typedefstruct//線性表順序存儲結構
{
ElemType*elem;//存儲空間基址
intlength;//線性表當前長度
intlistsize;//當前分配的存儲容量(以sizeof(ElemType)為單位)
}SqList;

StatusInitList_SL(SqList&L)//初始化順序線性表
{
//構造一個空的線性表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);//存儲分配失敗
L.length=0;//空表長度為0
L.listsize=LIST_INIT_SIZE;//初始存儲容量
returnOK;
}
Statusvisit(ElemTypee)//訪問元素
{
cout<<e<<"";
returnOK;
}

StatusListEmpty_SL(SqListL)//判斷線性表是否為空
{
if(L.length==0)returnTRUE;
elsereturnFALSE;
}

StatusGetElem_SL(SqListL,inti,ElemType&e)//用e返回L中第i個數據元素的值(注意:下標由0開始的)
{
if(L.length==0/*||i<1*/||i>L.length)returnERROR;
e=*(L.elem+i);
returnOK;
}


StatusClearList_SL(SqList&L)//將線性表置為空表
{
L.length=0;
returnOK;
}

intLocateElem_SL(SqList&L,ElemTypee)//返回L中第1個與e滿足關系的數據元素的位序
{
inti;
if(L.length==0)return0;
for(i=0;i<L.length;i++)
{
if(e==*(L.elem+i))//找到
break;
}
if(i>=L.length)return0;//沒有找到
return(i+1);
}

StatusListDelete_SL(SqList&L,inti,ElemType&e)
{
//在順序線性表L中刪除第i個元素,並用e返回其值
//i的合法值為1<=i<=ListLength_SL(L)
ElemType*p,*q;
if((i<1)||(i>L.length))returnERROR;//i的值不合法
p=&(L.elem[i-1]);//p為被刪除元素的位置
e=*p;//被刪除元素的值賦給e
q=L.elem+L.length-1;//表尾元素的位置
for(++p/*++p是指被刪除元素的下一個元素開始左移*/;p<=q;++p)//被刪除元素之後的元素左移
*(p-1)=*p;
--L.length;//表長減1
returnOK;
}

StatusListTraverse(SqListL)//遍歷線性表元素
{
inti;
for(i=0;i<L.length;i++)
visit(*(L.elem+i));
cout<<endl;
returnOK;
}
StatusListInsert_SL(SqList&L,inti,ElemTypee)
{
//在L中第i個位置之前插入新的元素e,
//i的合法值為1<=i<=ListLength_SL(L)+1
ElemType*newbase,*q,*p;
if(i<1||i>L.length+1)returnERROR;//i值不合法
if(L.length>=L.listsize)
{//當前存儲空間已滿,增加分配
newbase=(ElemType*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//存儲分配失敗
L.elem=newbase;//新基址
L.listsize+=LIST_INCREMENT;//增加存儲容量
}
q=&(L.elem[i-1]);//q為插入位置
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;//插入e
++L.length;//表長增1
returnOK;
}

intListLength_SL(SqListL)//線性表長度
{
return(L.length);
}


intmain(void)
{
/***************************

Callthealgorithminhere.


****************************/

return1;
}

這個是最簡單的線性表,它沒有使用到類.都是過程化。

java數組的插入演算法問題

arr[arr.length-1]=num; 43在這句的時候被num替換掉了
java的數組長度被初始化之後就是固定的 如果你想像裡面加入一個新值
需要重新定義數組,也就是說如果oldarr.length = 5 你想像中見放第六個數是辦不到的
只能重新定義數據 int[] newarr = new int[oldarr+1] 這么來弄

㈢ c語言插入法排序的演算法步驟

演算法描述
一般來說,插入排序都採用in-place在數組上實現。具體演算法描述如下:
從第一個元素開始,該元素可以認為已經被排序
取出下一個元素,在已經排序的元素序列中從後向前掃描
如果該元素(已排序)大於新元素,將該元素移到下一位置
重復步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重復步驟2~5
如果比較操作的代價比交換操作大的話,可以採用二分查找法來減少比較操作的數目。該演算法可以認為是插入排序的一個變種,稱為二分查找排序。
范常式式碼
void insertion_sort(int array[], int first, int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;

while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp;
}
}

㈣ 順序表中元素插入演算法詳細解釋

//將順序表第i-1個元素至最後一個元素全部向後移動一位
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j]
//將新元素x插入到原第i-1個元素的位置
L->data[i-1]=x;
//更新順序表長度
L->last++;

㈤ 單鏈表的元素插入演算法

#include <stdlib.h>#include<stdio.h>typedef struct LNode{
int data;
LNode *next;
}*List,LNode;void Creat(List &L,int n){//創建鏈表
List p;//用於循環創建的節點
L=(List)malloc(sizeof(struct LNode));
L->next=NULL;
for(int i=1;i<=n;i++){
p=(List)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
p->next =L->next;
L->next=p;
}
}//創建成功void Print(List L3){
L3=L3->next;
while(L3){
printf("%d",L3->data);
L3=L3->next;
}
}void Insert(List &L,int i,int e){//在第i個位置之前插入e
List p,s;
p=L;
int j=0; while(p&&j<=i-1){
if(j==i-1){
s=(List)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
j++;
p=p->next;
}
}

int main(){ List L;
int n,i,e;
scanf("%d,%d,%d",&n,&i,&e);
Creat(L,n);
Insert(L,i,e);
Print(L); return 0;
}1

㈥ 演算法與數據結構 插入

int inset(palist,p,x)
post-seq pslist;
int p,x;
{
int j;
if(i<0||i>p)
{
printf("i值錯誤!\n");
return 0;
}
else
{
for(j=p-1;j>=i-1;j--) pslist[j+1]=pslist[j];
pslist[i-1]=x;
p++;
return 1;
}

}

㈦ 如何使用aurora在word中插入演算法

Word中使用Aurora插入演算法偽代碼 1. properties-->packages \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsfonts} \usepackage{mathrsfs} \usepackage{algorithm} \usepackage{algorithmic} \usepackage{multirow} \alglan...

㈧ 二叉排序樹的插入演算法

首先執行查找演算法,找出被插結點的父親結點。
判斷被插結點是其父親結點的左、右兒子。將被插結點作為葉子結點插入。
若二叉樹為空。則首先單獨生成根結點。
注意:新插入的結點總是葉子結點。 //在二叉排序樹中插入查找關鍵字keyvoidInsertBST(t,key){if(t==NULL){t=newBiTree;t->lchild=t->rchild=NULL;t->data=key;return;}if(key<t->data)InsertBST(t->lchild,key);elseInsertBST(t->rchild,key);}//n個數據在數組d中,tree為二叉排序樹根voidCreateBiTree(tree,d[],n){tree=NULL;for(i=0;i<n;i++)InsertBST(tree,d[i]);}最小值二叉樹c常式: #include<stdio.h>#include<malloc.h>structpriorityqueue{intcapacity;intsize;structpriorityqueue*elements;}*tryit;structpriorityqueue*initialize(intmaxelements){structpriorityqueue*h;h=malloc(sizeof(structpriorityqueue));h->elements=malloc(sizeof(int)*(maxelements+1));h->capacity=maxelements;h->size=0;h->elements[0]=-23767;returnh;}voidinsert(intx,structpriorityqueue*h){inti;for(i=++h->size;h->elements[i/2]>x;i/=2)h->elements[i]=h->elements[i/2];h->elements[i]=x;}intdeletemin(structpriorityqueue*h){inti,child;intminelement,lastelement;minelement=h->elements[1];lastelement=h->elements[h->size--];for(i=1;i*2<=h->size;i=child){child=i*2;if(child!=h->size&&h->elements[child+1]<h->elements[child])child++;if(lastelement>h->elements[child])h->elements[i]=h->elements[child];elsebreak;}h->elements[i]=lastelement;returnminelement;}main(){tryit=initialize(10);insert(4,tryit);insert(5,tryit);insert(10,tryit);insert(3,tryit);printf(%d ,deletemin(tryit));printf(%d deletemin(tryit));printf(%d ,deletemin(tryit));printf(%d ,deletemin(tryit));getchar();}

㈨ 如何使用c語言實現插入演算法

void InsertSort(int arr[], int len, int key)
{
int i, j;
int temp;
for(i=0; i<len-1; i++)
{
temp = arr[i+1];
for(j=i; j>=0 && arr[j] > temp; j--)
arr[j+1] = arr[j];
arr[j+1] = temp;
}
}

㈩ 順序表的插入演算法的實現

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status ;
typedef int ElemType ;

typedef struct{
ElemType *elem;
int length,listsize;
}SqList;

status InitList(SqList &L)//初始化
{
L.elem=(int *)malloc(100*sizeof(int));
if(!L.elem) exit(-2);
L.listsize=100;
L.length=0;
return 1;
}

/*先建立新表*/
status Build(SqList &L)
{
int i,n;
printf("請輸入元素個數n和n個元素\n");
scanf("%d",&n);
//if(n>LIST_INIT_SIZE)

for(i=0;i<n;i++)
scanf("%d",L.elem+i);
L.length=n;
return 1;
}
/*輸出表中元素和長度*/
void Print(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",*(L.elem+i));
printf("\n長度為:%d\n\n",L.length);
}
/*刪除值為X的元素*/
status ListDelete1(SqList &L,int x)
{
int i;
for(i=0;i<L.length;i++)
if(*(L.elem+i)==x)
break;
if(i==L.length)
return 0;
for(i++;i<L.length;i++)
*(L.elem+i-1)=*(L.elem+i);
L.length--;
return 1;
}

/*逆置函數*/
void Inverse(SqList &L)
{
int i,t;
for(i=0;i<L.length/2;i++)
{
t=*(L.elem+i);
*(L.elem+i)=*(L.elem+L.length-i-1);
*(L.elem+L.length-i-1)=t;
}
printf("表逆置成功!!!\n");
}

/*(升序)*/
void Sort(SqList &L)
{
int i,j,t;
for(i=1;i<L.length;i++)
for(j=0;j<L.length-i;j++)
{
if(*(L.elem+j)>*(L.elem+j+1))
{
t=*(L.elem+j);
*(L.elem+j)=*(L.elem+j+1);
*(L.elem+j+1)=t;
}
}
printf("已升序\n");

}

/*合並兩個線性表*/
status Merger(SqList &L,SqList &Lb)
{
int i,j,k;
SqList Lc;
InitList(Lc);
if(Lc.listsize<L.length+Lb.length)
{
Lc.elem=(ElemType *)realloc(Lc.elem,(L.length+Lb.length+LISTINCREMENT)*sizeof(ElemType));
if(!L.elem) exit(-2);
Lc.listsize=L.length+Lb.length+LISTINCREMENT;
}
i=j=k=0;
while(i<L.length && j<Lb.length)
{
if(*(L.elem+i) < *(Lb.elem+j))
{
*(Lc.elem+k)=*(L.elem+i);
k++;i++;
}
else
{
*(Lc.elem+k)=*(Lb.elem+j);
k++;j++;
}
}
while(i<L.length)
{
*(Lc.elem+k)=*(L.elem+i);
k++;i++;
}
while(j<Lb.length)
{
*(Lc.elem+k)=*(Lb.elem+j);
k++;j++;
}
Lc.length=L.length+Lb.length;
L=Lc;
return 1;
}

/*將X插入,使仍然有序*/
status ListInsert(SqList &L,int x)
{
int i,k;
if(L.length>=L.listsize)
{
L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!L.elem) exit(-2);
L.listsize+=LISTINCREMENT;
}
for(i=0;i<L.length;i++)
if(x<*(L.elem+i))
break;
k=i;
for(i=L.length;i>k;i--)
*(L.elem+i)=*(L.elem+i-1);
*(L.elem+k)=x;
L.length++;
return 1;
}

/*提示函數*/
void Tips()
{
printf("請選擇你的想要的操作:\n");
printf("<1> 輸出順序表及順序表的長度\n");

printf("<2> 刪除值為x的結點\n");

printf("<3> 將順序表逆置\n");
printf("<4> 將順序表按升序排序\n");
printf("<5> 將x插入到順序表的適當位置上\n");
printf("<6> 將兩個有序表合並\n");
printf("<0> 退出\n\n");
}

int main()
{

SqList L,Lb;
InitList(L);
Build(L);
int a,x,flag;
//SqList L,Lb;
Tips();
scanf("%d",&a);
while(a)
{
switch(a)
{

case 1:
{ Print(L);
break;}
case 2:
{ printf("請輸入要刪除的數據X:\n");
scanf("%d",&x);
flag=ListDelete1(L,x);
if(flag)
printf("刪除成功!!\n\n");
else
printf("元素不存在,刪除失敗!!\n\n");
break;}

case 3:
Inverse(L);
break;
case 4:
Sort(L);
break;
case 5:
printf("請輸入要插入的數據X:\n");
scanf("%d",&x);
flag=ListInsert(L,x);

if(flag)
printf("插入成功!!\n\n");
else
printf("插入失敗!!\n\n");
break;

case 6:
printf("請輸入Lb的內容:\n");
InitList(Lb);
Build(Lb);
flag=Merger(L,Lb);
if(flag)
printf("合並成功!!\n\n");
break;
//default;

Tips();
scanf("%d",&a);

}
}
return 0;
}

閱讀全文

與插入演算法相關的資料

熱點內容
kalilinux系統安裝 瀏覽:71
綠色生活app是什麼 瀏覽:674
槍火重生文件夾 瀏覽:183
程序員智商劃分 瀏覽:332
修煉一套好演算法 瀏覽:294
空氣凈化pdf 瀏覽:309
necc文件夾 瀏覽:16
linux跑火車 瀏覽:355
androidsdk版本兼容 瀏覽:1002
果加密碼鎖開鎖記錄 瀏覽:446
python導入模塊的形式 瀏覽:259
shor演算法 瀏覽:58
python交易日歷 瀏覽:47
怎樣用雲伺服器組網 瀏覽:294
cass垂直執行命令 瀏覽:211
安卓數據線長什麼樣子教學視頻 瀏覽:794
紅米安卓12系統怎麼升級 瀏覽:917
菜鳥裹裹加密包裹啥樣的 瀏覽:374
時差測量與無源定位演算法 瀏覽:946
學習通app如何調二倍速 瀏覽:873