当前位置:首页 » 编程语言 » 定义一个插入函数c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

定义一个插入函数c语言

发布时间: 2023-03-25 19:42:54

c语言编写插入节点的函数(悬赏100分)

这个程序有两个主要问题
1. void insert(list*pHead,list*pNode)因为是按值传递的 pHead值,所培悔以不能改变pHead的值,改为按地址传递,list** pHead
2. insert()中,第一,二种情况时,没有组成循环链表的闭环(没有更新尾节点的next为新的head)。修改后的程序如下:

#include<stdio.h> //预编译命令
struct list//定义结构体
{
int num;
list* next;
};
list *head,*end; //定义全局变漏辩量

list* creat()//创建链表的函数
{
list* p=NULL;
list* q=NULL;
head=NULL;
int num;
scanf("%d",&num);
while(num!=0)
{
p=new list; //开辟空间
p->num=num;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
scanf("%d",&num);
}
end=q; //将链表的结尾最后一个结点赋给end
end->next=head; //让最后一个结点的的下个结点的地址不为空而指向头指针
return(head);
}

void insert( list** pHead,list* pNode) //插入接点的函数,
{
list *q,*r;
//第一种情况,链表为空
if(*pHead==NULL)
{
*pHead=pNode; //链表头指向pNode
(*pHead)->next = *pHead;//为了循环用
return; //完成插入操作,返回
}

//第二种情况,pNode结点num的值小于dengyu链表头结点num的值
//则将pNode的值插到链表头部
if(pNode->num<=(*pHead)->配搜正num)
{
//这是为了更新最后一个端点与头节点的连接
list* pos = *pHead;
while (pos->next != *pHead)
{
pos = pos->next;
}

pos->next = pNode;

pNode->next= (*pHead);
*pHead=pNode;

return;
}
//第三种情况,循环查找正确位置
r=*pHead;
q=(*pHead)->next;
while(q!=*pHead)
{
if(pNode->num>q->num)
{
r=q;
q=q->next;
}
else
break;
}
//如果插入到最后的位置,则更新pEnd的值
r->next=pNode;
pNode->next=q;
}

list* together(list* p1,list* p2) //定义两个链表合并的函数
{
list *q,*r;
q=p2;

do
{
r=new list; //开辟空间
r->num=q->num; //将q的值赋给r
insert(&p1,r); //调用插入结点的函数
q=q->next; //指针向后拨一个接点
}while(q!=p2); //当在最后一个结点时停止循环
return(p1); //返回头指针
}

void main() //主函数
{
list *list1,*list2,*r,*q;
list1=creat(); //调用创建链表的函数

list2=creat(); //调用创建链表的函数
r=together(list1,list2); //调用合并两个链表的函数
q=r->next;
for(;q!=r;q=q->next)
printf("%d ",q->num);

}

② 如何在C语言中定义一个函数

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

③ c语言如何定义一个函数

C语言中定义一个函数特别简单:函数名,加上(),再加上函数体就可以。给你一个特小的例子:
func()
{
}

④ 用C语言怎么写个 字符串插入函数

程序的大体思路可以是这样:
str1是原字符串,str2是待插入的字符串,position是待插入的位置,我们可以这样,用一个指针p_cur指向字符串1 str1中的待插入位置position,另一个指针p_end指向字符串1 str1的尾部,每次插入字符前,把str1中从当前位置开始一直到结束字符全部后移一个位置,空出当前位置,然后把要插入的字符放进这个位置,这样就完成了一个字符的插入,重复这个步骤,直到str2被完全插入。
代码如下:
#include <stdio.h>
#include <string.h>
void insert_str(char str1[],char str2[],int position)
{
/*
insert_str()函数
功能:将字符串str2插入到str1的position位置处
参数:char str1,char str2 ,int position
返回值:无
*/
int i;
char *p_end,*p_cur,*p;/*p_end指向第一个字符串的尾部,p_cur指向被插入的位置*/
p_end=str1+strlen(str1)-1;
p_cur=str1+position-1;
for(i=0;str2[i]!='\0';i++)
{
for(p=p_end;p>=p_cur;p--)
{
*(p+1)=*p;/*从p_cur到p_end的全部元素后移一个位置,此时p_cur指向的位置就空出来了*/
}
*p_cur=str2[i];/*把字符串2中的字符插入空出来的位置*/
p_cur++;/*p_cur下移一个位置*/
p_end++;/*多了一个字符,因此p_end也下移一个位置*/
}
}

void main()
{
char s1[100],s2[20];
int position;
printf("输入字符串1:\n");
gets(s1);
printf("输入插入位置:");
do
{
scanf("%d",&position);
while(getchar()!='\n');/*这一句可以把输入position的时候输入的回车去掉*/
}while(position<0||position>strlen(s1));
printf("输入字符串2:\n");
gets(s2);
insert_str(s1,s2,position);
printf("字符串被插入后变成:\n");
puts(s1);
}

⑤ c语言 编写数组的插入函数

你只需要建立一个数组,将数组建立的大一点,然后分两次输入数,构建一个数组,在整体排序输出就行了

⑥ C语言函数实现插入

这个很简单啊。基本的思路就是先查找到插入或者删除的数字所在数组的位置,如果是插入,就把之后的依次想后挪动一个,然后插入;如果是删除,把之后的依次想前移动一个就行了,不过别忘了处理最后一个数字就行了。要是还有问题,我帮你写个算了。

⑦ 如何用c语言定义一个函数

函数是用户与程序的接口,在定义一个函数前,首先要清楚以下三个问题。 1) 函数的功能实现及算法选择。算法选择会在后续文章详细讲解,本节重点关注函数的功能实现。一般选取能体现函数功能的函数名,且见名知意,如求和函数的函数名可取为 add,求最大值的函数名可取为 max,排序函数可取名为 sort 等。 2) 需要用户传给该函数哪些参数、什么类型,即函数参数。 3) 函数执行完后返回给调用者的参数及类型,即函数返回值类型。 函教定义格式 函数定义的一般格式为: 返回类型 函数名 (类型参数1,类型参数2,…) { 函数体 } 也可以不含参数,不含参数时,参数表中可写关键字 void 或省略,为规范起见,教程中对没有参数的函数,参数表中统一写 void。例如: 类型 函数名 () { 函数体 } 等价于: 类型 函数名 (void) //建议的书写方式 { 函数体 } 如果该函数没有返回类型,则为 void 类型。例如: void add (int x,int y) { printf ("sum=%d\n", x+y); } 除了 void 类型外,在函数体中,均需要显式使用 return 语句返回对应的表达式的值。 函教返回值 函数的值是指调用函数结束时,执行函数体所得并返回给主调函数的值。 关于函数返回值说明如下。 1) 带返回值的函数,其值一般使用 return 语句返回给调用者。其格式为: return 表达式; 或者 return (表达式); 例如: int add (int a, int b) { return (a + b); //return 后为表达式 } 函数可以含一个或多个 return 语句,但每次调用时只能执行其中一个 return 语句。 例如,求整数绝对值的函数: int f (int n) //含多个return语句,但每次调用只执行一个 { if (n >= 0) return n; else return -n; }

⑧ 用C语言编写自定义函数:

(1)素数判断函数:是返回1,否则返回0

intprime(intn){
inti;
if(n>2&&!(n&1)||n<2)
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}

(2)编写排序函数(冒泡排序、选择尺余好排序)

voidbubbling(int*p,intn){//冒泡
inti,j,k;
for(i=0;i<n;i++)
for(j=1;j<n;j++)
if(p[j]<p[j-1])
k=p[j],p[j]=p[j-1],p[j-1]=k;
}
voidselect(int*p,intn){//选毁肆择
inti,j,k;
for(n--,i=0;i<n;i++){
for(k=i,j=k+1;j<=n;j++)
if(p[k]<p[j])
k=j;
if(k-i)
j=p[k],p[k]=p[i],p[i]=j;
}
}

(3)查找函数,找到返回下标,否则返回-1

intfind(int*p,intn,intx){//顺序
inti;
for(i=0;i<n;i++)
if(p[i]==x)
returni;
return-1;
}
intfihalf(int*p,intn,intx){//折半,升序为例
intl,r,m;
l=0,r=n-1;
while(m=(l+r)>>1,l<r&&p[m]-x)
p[m]<x?l=m+1:r=m-1;
returnp[m]==x?m:-1;
}

(4)插入函数,升序为例陵铅


⑨ C语言编写一个插入删除函数

一般呢,插入和删除函数是分开写的,还有分成两种存储结构,1.顺序表,2.链表,我给你一个我上数据结构时候写的链表的操作,里面全都有,如果不会用,追问我

#include<stdio.h>

#include<malloc.h>

#include<Windows.h>

#include<conio.h>

#include<stdlib.h>

typedef struct

{

int data;

struct LNode *next;

}LNode;

LNode *Listinit(LNode *L)//初始化链表返还头指针

{

L = (LNode *)malloc(sizeof(LNode));

if (!L)return 0;

L->next = NULL;

return L;

}

int GetElem_L(LNode *L, int i, int *e)//取第i个元素

{

int j;

LNode *p;

p=L->next;j=1;

while(p&&j<i)

{

p=p->next;++j;

}

if(!p||j>i) return 0;//i超过表长

*e=p->data;

return 1;

}

int ListInsert_L(LNode *L, int i, int e)//插入数据元素

{

LNode *p1 = L,*p2=L;

int j = 0;

if (i-1 > LinkLength(L))

return 2;

while(p1!=NULL && j<i-1)

{

p1 = p1->next;

j++;

}

p2 = (LNode *)malloc(sizeof(LNode));

if (!p2)

return 0;

p2->data = e;

p2->next = p1->next;

p1->next = p2;

return 1;

}

void ClearList(LNode *L)//重置为空表

{

LNode *p;

while(L->next)

{

p=L->next;

L->next=p->next;

free(p);

}

}

void print_link(LNode *L)//输出函数

{

LNode *p = L;

p = p->next;

while (p != NULL)

{

printf("%5d", p->data);

p = p->next;

}

}

int ListDlete_L(LNode *L, int i, int *e)//删除L中I,并用e返回

{

int j = 0;

LNode *p1 = NULL, *p2 = NULL;

p1 = L;


while (p1->next != NULL && j < i - 1)

{

p1 = p1->next;

j++;

}

if (p1->next == NULL || j > i - 1)

return 0;

p2 = p1->next;

p1->next = p2->next;

free(p2);

return 1;

}

int LinkLength(LNode *L)//链表的长度

{

int i = 0;

LNode *p = L->next;

while (p != NULL)

{

i++;

p = p->next;

}

return i;

}