堆栈区别、数组指定元素删除、单链表插入与删除

2024年2月2日

1.请简述栈区和堆区的区别?
堆栈区别、数组指定元素删除、单链表插入与删除_第1张图片

⒉.编程题目

1.有一个整形数组:int arr[](数组的值由外部输入决定),一个整型变量: x(也由外部输入决定)。要求:
1)删除数组中与x的值相等的元素2)不得创建新的数组
3)最多只允许使用单层循环
4)无需考虑超出新数组长度后面的元素,所以,请返回新数组的长度例如:{1,2,3,5,7,3,5,9) x=3
原数组的有效部分变为:(1,2,5,7,5,9}

头文件:

#ifndef __HEAD_H__
#define __HEAD_H__
#include
#include
#include
#define MAXSIZE 10
enum{FALSE=-1,SUCCESS};
typedef int datatype;
typedef struct Node
{
	datatype data[MAXSIZE];
	int len;
}*Linklist;
Linklist create();
int full(Linklist list);
int insert(Linklist list,datatype element);
int delete_index(Linklist list,int index);
int delete(Linklist list,datatype key);
int output(Linklist list);
#endif

主函数:

#include"head.h"
int main(int argc, const char *argv[])
{
	Linklist list=create();
	int num;
	printf("please enter num:");
	scanf("%d",&num);
	int element;
	for(int i=0;ilen);
	return 0;
}

自定义函数:

#include"head.h"
/*
 * function:    内存申请
 * @param [ in] 
 * @param [out] 成功返回首地址,失败返回NULL
 * @return      
 */
Linklist create()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	memset(s->data,0,sizeof(s->data));
	s->len=0;
	return s;
}
/*
 * function:    判满
 * @param [ in] 顺序表
 * @param [out] 满了输出-1;未满输出0
 * @return      
 */
int full(Linklist list)
{
	return list->len==MAXSIZE?FALSE:SUCCESS;
}
/*
 * function:    尾插
 * @param [ in] list 插入值
 * @param [out] 成功返回0,失败返回-1
 * @return      
 */
int insert(Linklist list,datatype element)
{
	if(NULL==list || full(list))
		return FALSE;
	list->data[list->len++]=element;
	return SUCCESS;
}
/*
 * function:    任意下标删除
 * @param [ in] 数组,下标
 * @param [out] 成功返回0,失败返回-1
 * @return      
 */
int delete_index(Linklist list,int index)
{
	if(NULL==list || list->lenlen;i++)
	{
		list->data[i-1]=list->data[i];
	}
	list->len--;
	return SUCCESS;
}
/*
 * function:    按元素删除
 * @param [ in] list 删除元素
 * @param [out] 成功返回0,失败返回-1
 * @return      
 */
int delete(Linklist list,datatype key)
{
	if(NULL==list)
		return FALSE;
	for(int i=0;ilen;i++)
	{
		if(list->data[i]==key)
		{
			delete_index(list,i);
		}
	}
	return SUCCESS;
}
/*
 * function:    遍历输出
 * @param [ in] list
 * @param [out] 成功返回0,失败返回-1
 * @return      
 */
int output(Linklist list)
{
	if(NULL==list)
		return FALSE;
	for(int i=0;ilen;i++)
	{
		printf("%-5d",list->data[i]);
	}
	return SUCCESS;
}

运行结果:

堆栈区别、数组指定元素删除、单链表插入与删除_第2张图片

3.请编程实现单链表的头插,头删、尾插、尾删

头文件:

#ifndef __head_h__
#define __head_h__
#include
#include
#include
typedef int datatype;
typedef struct Node
{
	datatype data;
	struct Node *next;
}*Linklist;
Linklist create();
Linklist insert_head(Linklist head,datatype element);
Linklist insert_rear(Linklist head,datatype element);
void output(Linklist head);
Linklist delete_head(Linklist head);
Linklist delete_rear(Linklist head);

#endif

主函数:

#include"head.h"
int main(int argc, const char *argv[])
{
	datatype element;
	int num;
	Linklist head=NULL;
	printf("please enter num:");
	scanf("%d",&num);
	for(int i=0;i

自定义函数:

#include"head.h"
/*
 * function:    创建新节点
 * @param [ in] 
 * @param [out] 成功返回首地址,失败返回NULL
 * @return      
 */
Linklist create()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(s==NULL)
		return NULL;
	s->data='\0';
	s->next=NULL;
	return s;
}
/*
 * function:   头插
 * @param [ in] 头 插入的值
 * @param [out] 头
 * @return      
 */
Linklist insert_head(Linklist head,datatype element)
{
	Linklist s=create();
	s->data=element;
	if(head==NULL)
	{
		head=s;
		return head;
	}
	else
	{
		s->next=head;
		head=s;
	}
	return head;
}
/*
 * function:    尾插 
 * @param [ in] 头 插入值
 * @param [out] 头
 * @return      
 */
Linklist insert_rear(Linklist head,datatype element)
{
	Linklist s=create();
	s->data=element;
	if(head==NULL)
	{
		head=s;
		return head;
	}
	Linklist p=head;
	while(p->next)
	{
		p=p->next;
	}
	p->next=s;
	return head;
}
/*
 * function:    遍历输出
 * @param [ in] 头
 * @param [out] 
 * @return      
 */
void output(Linklist head)
{
	if(head==NULL)
	{
		puts("empty");
		return;
	}
	Linklist p=head;
	while(p!=NULL)
	{
		printf("%-5d",p->data);
		p=p->next;
	}
}
/*
 * function:    头删
 * @param [ in] 头
 * @param [out] 头
 * @return      
 */
Linklist delete_head(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist del=head;
	head=head->next;
	free(del);
	return head;
}
/*
 * function:    尾删
 * @param [ in] 头
 * @param [out] 头
 * @return      
 */
Linklist delete_rear(Linklist head)
{
	if(head==NULL)
		return NULL;
	if(head->next==NULL)
	{
		free(head);
		return NULL;
	}
	Linklist p=head;
	while(p->next->next)
	{
		p=p->next;
	}
	Linklist del=p->next;
	free(del);
	return head;
}

运行结果:

堆栈区别、数组指定元素删除、单链表插入与删除_第3张图片

你可能感兴趣的:(算法,数据结构)