當前位置:首頁 » 編程語言 » 定義一個插入函數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;

}