首页 > 编程知识 正文

c语言实现lfm,C语言实现单链表的逆置

时间:2023-12-29 20:31:47 阅读:330687 作者:LLPI

本文目录一览:

如何在c语言中实现until语句的功能?

i=100;x0dx0ado {x0dx0a i--;x0dx0a} while( !(i10)) /* until 是这样,但是在c中这样一写不能循环啦只能从求解方法中找解决办法啦*/

用C语言编码实现strlen函数

根据题意可得如下代码:

#include stdio.h

int strlen(char *s)

{

    int i = 0;

    while (s[i] != '')i++;

    return i;

}

int main()

{

    char s[10] = "12345";

    printf ("%dn", strlen(s));

    return 0;

}

执行结果:

C语言可以实现为一维数组动态分配内存吗?

可以。。

例子如下:

# include stdio.h

# include malloc.h

void main(void)

{

int len,i, *p;

printf("输入要存放元素的个数:");

scanf("%d", len); //输入长度构造动态一维数组

p = (int *)malloc(sizeof(int)*5);

for(i=0; ilen; ++i)

scanf("%d",(p+i)); // p+i等同于p[i];

// 将动态一维数组p的长度增加至6,并将第6个元素赋值为100;

realloc(p,sizeof(int)*6);//realloc重新增加或减少一维数组的长度;

p[5] = 99;

printf("输出内容:n");

for(i=0; i=len; ++i)

printf("%-5d", p[i]); //p[i]等同于*(p+i);

printf("n");

第一个是在栈上分配:就是在函数调用栈所在的那个栈上

第二个是在“堆区”分配。

C语言Printf实现机制

无比复杂,不过可以给你一个主要参考,可变参数是保存在一个可变参数表va_list之中的,当执行printf时有一个指向可变参数表首的指针va_start和一个指向可变参数表末尾的指针va_end,程序在遇到占位符时,从可变参数va_list表中从va_start开始去取参数并转换为相应的格式,执行到va_end即可变参数取完,函数中止,我简单的描叙了下,之中还涉及许多其他的转换,就不多说了。

数据结构如何通过C语言来实现,请举例说明,尽可能详细

数据的结构无非就是表:线性表、链表,栈,队列,串,数组,树、二叉树,图,这几种。

常用的使用指针,或数组建立数据结构,然后对其进行插入、删除、查找、排序等操作。

以下是C语言实现的循环队列:

#includestdio.h

#includestdlib.h

#define MAX_QSIZE 5

struct SqQueue

{ QElemType *base; // 初始化的动态分配存储空间

int front; // 头指针,若队列不空,指向队列头元素

int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置

};

// bo3-4.cpp 循环队列(存储结构由c3-3.h定义)的基本操作(9个)

void InitQueue(SqQueue Q)

{ // 构造一个空队列Q。在教科书第64页

Q.base=(QElemType*)malloc(MAX_QSIZE*sizeof(QElemType));

if(!Q.base) // 存储分配失败

exit(OVERFLOW);

Q.front=Q.rear=0;

}

void DestroyQueue(SqQueue Q)

{ // 销毁队列Q,Q不再存在

if(Q.base) // 队列Q存在

free(Q.base); // 释放Q.base所指的存储空间

Q.base=NULL; // Q.base不指向任何存储单元

Q.front=Q.rear=0;

}

void ClearQueue(SqQueue Q)

{ // 将队列Q清为空队列

Q.front=Q.rear=0;

}

int QueueEmpty(SqQueue Q)

{ // 若队列Q为空队列,则返回TRUE;否则返回FALSE

if(Q.front==Q.rear) // 队列空的标志

return TRUE;

else

return FALSE;

}

int GetHead(SqQueue Q,QElemType e)

{ // 若队列Q不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR

if(Q.front==Q.rear) // 队列空

return ERROR;

e=Q.base[Q.front]; // 将队头元素的值赋给e

return OK;

}

int EnQueue(SqQueue Q,QElemType e)

{ // 插入元素e为队列Q的新的队尾元素。在教科书第65页

if((Q.rear+1)%MAX_QSIZE==Q.front) // 队列满

return ERROR;

Q.base[Q.rear]=e; // 将e插在队尾

Q.rear=(Q.rear+1)%MAX_QSIZE; // 队尾指针+1后对MAX_QSIZE取余

return OK;

}

int QueueLength(SqQueue Q)

{ // 返回队列Q的元素个数,即队列的长度。在教科书第64页

return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;

}

int DeQueue(SqQueue Q,QElemType e) // 在教科书第65页

{ // 若队列Q不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR

if(Q.front==Q.rear) // 队列空

return ERROR;

e=Q.base[Q.front]; // 将队头元素的值赋给e

Q.front=(Q.front+1)%MAX_QSIZE; // 移动队头指针

return OK;

}

void QueueTraverse(SqQueue Q,void(*visit)(QElemType))

{ // 从队头到队尾依次对队列Q中每个元素调用函数visit()

int i=Q.front; // i最初指向队头元素

while(i!=Q.rear) // i指向队列Q中的元素

{ visit(Q.base[i]); // 对i所指元素调用函数visit()

i=(i+1)%MAX_QSIZE; // i指向下一个元素

}

printf("n");

}

void main()

{

int j;

int i=0,m;

int d;

SqQueue Q;

InitQueue(Q); // 初始化队列Q,失败则退出

printf("初始化队列后,队列空否?%u(1:空 0:否)n",QueueEmpty(Q));

printf("请输入整型队列元素(不超过%d个),-1为提前结束符:",MAX_QSIZE-1);

do

{ scanf("%d",d); // 由键盘输入整型队列元素

if(d==-1) // 输入的是提前结束符

break; // 退出输入数据循环

i++; // 计数器+1

EnQueue(Q,d); // 入队输入的元素

}while(iMAX_QSIZE-1); // 队列元素的个数不超过允许的范围

printf("队列长度为%d,",QueueLength(Q));

printf("现在队列空否?%u(1:空 0:否)n",QueueEmpty(Q));

printf("连续%d次由队头删除元素,队尾插入元素:n",MAX_QSIZE);

for(m=1;m=MAX_QSIZE;m++)

{ DeQueue(Q,d); // 删除队头元素,其值赋给d

printf("删除的元素是%d,请输入待插入的元素:",d);

scanf("%d",d); // 输入要入队的元素给d

EnQueue(Q,d); // 将d入队

}

m=QueueLength(Q); // m为队列Q的长度

printf("现在队列中的元素为");

QueueTraverse(Q,print); // 从队头到队尾依次对队列Q的每个元素调用函数print()

printf("共向队尾插入了%d个元素。",i+MAX_QSIZE);

if(m-20)

printf("现在由队头删除%d个元素,",m-2);

while(QueueLength(Q)2)

{ DeQueue(Q,d); // 删除队头元素,其值赋给d

printf("删除的元素值为%d,",d);

}

j=GetHead(Q,d); // 将队头元素赋给d

if(j) // 队列Q不空

printf("现在队头元素为%dn",d);

ClearQueue(Q); // 清空队列Q

printf("清空队列后,队列空否?%u(1:空 0:否)n",QueueEmpty(Q));

DestroyQueue(Q); // 销毁队列Q

}

c语言完整实现?

假定已 声明并初始化了 数组 int nums[],数组元素个数 n, 给了 target 的值。

程序如下:

#include stdio.h

int main()

{

int nums[]={2,7,11,15,3},n=5;

int target=9;

int i,j;

int i1=-1,i2=-1;

for (i=0;in-1;i++)

for (j=i+1;jn;j++){

if (nums[i]+nums[j] ==target){ i1=i;i2=j; break;};

}

if (i10) printf("Can not find the elements !n");

else printf("Two subscripts are i1=%d i2=%dn",i1,i2);

return 0;

}

输出:Two subscripts are i1=0 i2=1

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。