c插入算法
A. 用c语言编写程序建立链表结构体类型实现链表初始化遍历和插入算法
#include <stdio.h>
#include <stdlib.h>
#define telemtype char
#define ok 1
#define error 0
#define overflow -1
typedef int status;
typedef struct bitnode
{
telemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void preordertraverse(bitree T)
{
if(T)
{
printf("%c ",T->data);
preordertraverse(T->lchild);
preordertraverse(T->rchild);
}
}
status createbitree(bitree &T)
{
int ch;
ch=getchar();
if(ch==' ')
T=NULL;
else
{
if(!(T=(bitnode*)malloc(sizeof(bitnode))))
exit(overflow);
T->data=ch;
createbitree(T->lchild);
createbitree(T->rchild);
}
return ok;
}
void prinbtree(bitree T)
{
if(T!= NULL)
{
printf("%c", T->data);
if(T->lchild!=NULL||T->rchild!=NULL)
{
printf("(");
prinbtree(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
prinbtree(T->rchild);
printf(")");
}
}
}
int main()
{
bitree T=NULL;
printf("先序输入二叉树:\n");
createbitree(T);
printf("先序遍历二叉树为:\n");
preordertraverse(T);
printf("\n");
prinbtree(T);
printf("\n");
return 0;
}
我写的,希望对你有用!
B. 【C语言·数据结构】关于线性表里的顺序表的插入算法
你这里的线性表是特指链表吧?要不然是不会需要把长度加1的。
链表理论上是没有长度限制的(但实际上你不能无限地增长它,因为计算机的内存是有限的)
在插入一个元素后再把长度加1是没有任何问题的,反而这是一个较为妥当的做法,因为如果你一开始就把长度加一,但元素插入失败的话,那就会出现问题。
另外,你要明确一个观点,“后移元素”并不是真的把它在内存中的位置后移了,只是把它挂在了当前插入的这个结点后面,对任何的其他元素的地址都不会有影响的。
表长其实是一个方便你管理链表的东西,它可以记录当前链表的长度,让你较为容易地判断链表是否为空,也可以让你限定链表的长度(通过设置一个max值,当length达到max时,不准再插入元素)
C. c语言中插入排序的基本思想是什么
插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
D. 求助C语言 单链表的插入、删除算法 的一些问题
第一个问题和第三个问题都是引用的意思,就是在函数中改变该变量的值会影响调用的地方的值,同时这样如果是大的对象,不是复制一个值而是原来的变量,只是一个别名。
第二个问题&&是与的意思,也就是说当p指针不为空并且j < i-1时候执行循环
最后一个三句话意思是删除一个元素,在此处删除的是指针q指向的元素,用q指向要删除的元素,然后第二句话是让当前指针的下一个元素指向q的下一个元素,也就是删除了q,然后把要删除的元素的值也就是data赋给e变量
不知道解释清楚了没有,要是不行再联系我。
E. C语言插入排序算法
int main ()
{
int i;
DataType a[MaxSize];
SqList L;
srand((unsigned)time(NULL));
for (i=0;i<MaxSize;i++)
{
int number = rand()%MaxSize + 1;
//printf ("%d ",number);
a[i].key = number;
L.data[i].key = a[i].key;
}
return 0;
}
F. 如何使用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;
}
}
G. 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;
}
}
H. c语言实现插入排序算法
插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
I. 关于c语言数据结构 insertlist插入算法
您的sort函数有错误。如果我没有讲明白可以联系我。
void
sort(seqlist
*p,int
i,int
e)//将元素e传入到数组的第i个位序前
{
int
j;
//if(p->n>10)
if(p->n<10)//判断语句为p->n应该小于10才不会溢出
for(j=p->n;j>=i;j--)
{
p->b[j]=p->b[j-1];//将第i个位置以后的元素依次后移
//p->b[i-1]=e;
//p->n=p->n+1;
}
p->b[i-1]=e;//只要在最后插入一次就可以了。
p->n=p->n+1;//p->n=p->n+1只需运行一次。
}
J. c语言折半插入算法
void bisort(int* a, int n)
{
int k, i, j, m, c;
for(k = 2; k <= n; ++k)
{
c = a[k-1];
i = 0;
j = k-2;
do {
m = (i + j) / 2;
if (a[m] >= c)
j = m-1; else if (a[m] < c)
i = m+1;
} while (i <= j);
for (j = k-1; j > i; --j)
a[j] = a[j-1];
a[j] = c;
}
}