20、数据结构相关练习20210202

一、请简述栈区和堆区的区别。

1.栈区借助于栈的思想实现,“先进后出”,地址申请从大地址到小地址;堆区借助队列思想实现,“先进先出”,地址申请从小地址到大地址;

2.栈区的内存由计算机自动申请自动释放,堆区由程序员手动申请(malloc)手动释放(free);

3.栈区大小一般在几M,堆区一般在几G;

4.由于栈区较小,可能会出现溢出情况(堆栈溢出),如递归调用较深时,计算机会不断在栈区申请内存。

5.栈区内存申请一般较连续,堆区容易出现片段化。

二、有一个整形数组:arr[ ](数据值由外部输入决定),一个整数型变量:X(也是外部输入决定)要求:

1.删除数组中与x相等的元素

2.不得创建新数组

3.最多只允许使用单层循环

4.无需考虑超出新数组长度后面的元素,所以请返回新数组的长度。

如:{1,2,3,5,7,3,5,9}  x=3  则原数组的有效部分变为:{1,2,5,7,5,9 }。

代码:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define MAXSIZE 8
typedef struct arr
{int data[MAXSIZE];int len;
}*pointer;
pointer create_arr()
{pointer p=(pointer)malloc(sizeof(struct arr));if(NULL==p)return NULL;memset(p->data,0,sizeof(p->data));p->len=0;return p;
}
void create(pointer p,int element)
{if(NULL==p||p->len==MAXSIZE){	puts("fail or full");return;}p->data[p->len++]=element;
}
void delete_index(pointer p,int i)
{for(int j=i+1;j<p->len;j++){p->data[j-1]=p->data[j];}p->len--;	
}
int delete_x(pointer p,int x)
{for(int i=0;i<p->len;i++){if(x==p->data[i]){delete_index(p,i);i--;}}return p->len;
}
int main(int argc, const char *argv[])
{pointer p=create_arr();int element;for(int i=0;i<MAXSIZE;i++){printf("please enter element %d :",i+1);scanf("%d",&element);create(p,element);}int x;printf("please enter delete x:");scanf("%d",&x);int l=delete_x(p,x);for(int i=0;i<l;i++){printf("%d ",p->data[i]);}puts("");return 0;
}

运行结果:

三、请编程实现单链表的头插、头删、尾插、尾删。

代码:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
typedef struct node //定义链表节点结构体:数据域、指针域
{int data;struct node *next;
}*linklist;
linklist create_node()//创建新节点并初始化,返回节点地址
{linklist s=(linklist)malloc(sizeof(struct node));if(NULL==s)return NULL;s->data=0;s->next=NULL;return s;
}
linklist insert_head(linklist head,int element)
{linklist s=create_node();if(NULL==s){puts("fail");return NULL;}s->data=element;if(NULL==head){head=s;return head;}s->next=head;head=s;return head;
}
linklist insert_rear(linklist head,int element)
{linklist s=create_node();	if(NULL==s){puts("fail");return NULL;}s->data=element;if(NULL==head){head=s;return head;}linklist p=head;while(p->next)p=p->next;p->next=s;return head;
}
void output(linklist head)
{linklist p=head;while(p){printf("%d ",p->data);p=p->next;}puts("");
}
linklist delete_head(linklist head)
{if(NULL==head){puts("empty");return head;		}if(NULL==head->next){free(head);return NULL;}linklist del=head;head=head->next;free(del);del=NULL;return head;
}
linklist delete_rear(linklist head)
{if(NULL==head){puts("empty");return head;		}if(NULL==head->next){free(head);return NULL;}linklist p=head;while(p->next->next)p=p->next;linklist del=p->next;p->next=NULL;free(del);del=NULL;return head;
}
int main(int argc, const char *argv[])
{linklist head=NULL;//定义单链表头指针并初始化int len;//根据终端输入的值确定单链表的长度printf("please enter the length of the linklist:");scanf("%d",&len);int element;for(int i=0;i<len;i++)//循环输入数值,头插或尾插创建链表{printf("%d element:",i+1);scanf("%d",&element);
//		head=insert_head(head,element);//头插head=insert_rear(head,element);//尾插}output(head);//遍历head=delete_head(head);//头删head=delete_head(head);output(head);head=delete_rear(head);//尾删output(head);return 0;
}

运行:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot162基于SpringBoot的体育馆管理系统的设计与实现

体育馆管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕…

【单片机】简单的自定义延时程序设计(代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

【Django】如何设置支持多语种网站,中文/英文网站

首先&#xff0c;需要明确一点&#xff1a;我们要实现的中英对照翻译&#xff0c;这个翻译不是浏览器翻译的&#xff0c;也不是Django帮你翻译。这个需要你自己事先手动翻译好&#xff0c;存放在专门翻译文件中&#xff0c;Django只是事后调用而已。 第一步 新建项目后&#x…

代码随想录算法训练营第25天 | 216.组合总和III ,17.电话号码的字母组合

回溯章节理论基础&#xff1a; https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 216.组合总和III 题目链接&#xff1a;https://leetcode.cn/problems/combination-sum-iii/ 思路: 本题就是在[1,2,3,4,5,6,7,…

C++ lambda [],[=] ,[],[this] 的使用

在c11标准中引入了lambda表达式&#xff0c;一般用于定义匿名函数 [],[] ,[&],[this] 都是捕获列表 [] 的作用&#xff1a; 什么也不捕获 [] 的作用&#xff1a; 按值捕获所有变量 [&] 的作用&#xff1a; 引用捕获所有外部作用域内的变量 [this]的作用&#xf…

C语言第二十弹---指针(四)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、字符指针变量 2、数组指针变量 2.1、数组指针变量是什么&#xff1f; 2.2、数组指针变量怎么初始化 3、⼆维数组传参的本质 4、函数指针变量 4.1…

通过nginx学习linux进程名的修改

目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候&#xff0c;用ps查看nginx的进程信息&#xff0c;可能的输出如下&#xff1a; root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …

Linux------命令行参数

目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al &#xff0c;可以查看当前文件夹下所有文件的信息&#xff0c;还有其他的如rm&#xff0c;touch等指令&#xff0c;都可以帮我们完成相应的操作。 其实运行这些…

完蛋!我把AI喂吐了!

当我们用 RAG 构建一个知识库问答应用的时候&#xff0c;总是希望知识库里面灌的数据越多&#xff0c;问答的效果越好&#xff0c;事实真是如此吗&#xff1f;这篇文章给大家答案。 引言 在人工智能问答系统的发展中&#xff0c;RAG&#xff08;Retrieval-Augmented Generatio…

eclipse使用google的Java代码格式

插件下载地址 1.下载eclipse的插件 2.下载的jar包放到eclipse安装目录的dropins文件夹 D:\install_package\STS\sts-4.10.0.RELEASE\dropins&#xff13;.重启后设置 eclipse - windows - preference - java - code style - formatter -

『运维备忘录』之 HTTP 响应状态码速查

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

【网页设计】春节页面背景模板

无偿下载地址&#xff1a;https://download.csdn.net/download/weixin_47040861/88811143 1.实现效果 2.代码 1.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…