考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)

本文提供了一套基于C语言实现的链表基本操作代码,包括初始化、插入、删除等核心功能,并通过一个测试实例展示了如何使用这些函数。适用于考研复习及初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)

本代码示例为纯c语言编写的List基本操作,与数据结构(严蔚敏)课本讲述内容一致,可用于考研同学复习数据结构。

/*linklist.h*/
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 0
#define ERROR -1;

typedef int ElemType;

typedef struct SNode
{
	ElemType data;
	struct SNode *next;	
}Node,*Node_Ptr;

typedef struct SList
{
	Node* head;
	int length;
}LinkList;//便于理解定义链表类型

/*函数声明*/
ElemType Input();
void Init(LinkList *list);
void Insert(LinkList* list, int pos, ElemType e);
void Delete(LinkList* list, ElemType e);
void PrintElem(ElemType e);
void Print(LinkList list);
void Clear(LinkList* list);
void Destory(LinkList* list);
int IsEmpty(LinkList list);
int GetLength(LinkList list);


/*函数定义*/
/*初始化链表*/
void Init(LinkList *list)
{
	Node* pHead = (Node*)malloc(sizeof(Node));
	if(!pHead)
	{
		printf("error:malloc is NULL\n");
		exit(-1);
	}
	pHead->next = NULL;
	list->head = pHead;
	list->length = 0;
}
/*获取链表长度,返回int,也就是长度值*/
int GetLength(LinkList list)
{
	return list.length;
}
/*返回int型,TRUE表示链表为NULL,FALSE表示链表非空*/
int IsEmpty(LinkList list)
{
	if(list.length == 0)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
/*打印单个元素*/
void PrintElem(ElemType e)
{
	printf("%-4d",e);
}
/*打印链表*/
void Print(LinkList list)
{
	if( IsEmpty(list) )
	{
		printf("List is Empty\n");
		return;
	}
	Node* p = list.head;
	p = p->next;
	while(p != NULL)
	{
		PrintElem(p->data);
		p = p->next;
	}
	printf("\n");	
}
/*插入元素,参数1:传入链表地址,参数2:插入位置,参数3:插入元素值*/
void Insert(LinkList* list, int pos, ElemType e )
{
	if(pos < 1)
		pos = 1;
	else if( pos > list->length)
		pos = list->length+1;
	Node* p = list->head;
	while(--pos)
	{
		p = p->next;
	}
	
	Node* pNew = (Node*)malloc(sizeof(Node));
	pNew->data = e;
	pNew->next = NULL;
	
	if(p != NULL)
	{
		pNew->next = p->next;
		p->next = pNew;
	}
	else
	{
		p->next = pNew;
	}
	list->length++;
	return;
}
/*删除元素,参数1:传入链表地址,参数2:要删除的元素值*/
void Delete(LinkList* list, ElemType e)
{
	Node* p = list->head;
	Node* q = p->next;
	while(q != NULL && q->data !=e )
	{	
		p = p->next;
		q = q->next;		
	}
	if(q == NULL)
	{
		printf("No Found this element \n");
		return;
	}
	
	p->next = q->next;	
	free(q);
	q = NULL;
	list->length--;
}


/*输入单个元素,返回值为元素类型用于接收元素*/
ElemType Input()
{
	printf("input Element:");
	ElemType e = 0;
	scanf("%d",&e);
	getchar();
	return e;
}
/*清空链表元素*/
void Clear(LinkList* list)
{
	Node* p = list->head;
	Node* q = p->next;
	while(q != NULL)
	{
		p->next = q->next;
		free(q);
		q=p->next;
		list->length--;
		//Print(*list);	
	}
}
/*销毁链表,链表不在可用,如果要继续使用,需要再次初始化*/
void Destory(LinkList* list)
{
	Clear(list);
	Node* p = list->head;
	free(p);
	p = NULL;
	printf("List is destoried\n");
}
#endif

/*main.c用于测试*/


#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include "LinkList.h"

int main(int argc, char *argv[])
{
	int i = 0, pos = 0;
	ElemType e = 0;
	
	LinkList list;
	Init(&list);
	
	for(i=0;i<10;i++)
	{
		pos = rand()%10;
		e = i;
		printf("insert e=%d to pos=%d\t",e,pos);
		Insert(&list, pos, e);
		Print(list);
	}
	printf("list length %d\n",GetLength(list));
	//删除值为5的元素 
	printf("after delete Element's value is 5\n"); 
	Delete(&list, 5);
	Print(list);
	printf("list length %d\n",GetLength(list));
	//再一次删除5的元素,无法找到。 
	printf("again delete Element's value is 5\n");
	Delete(&list, 5);
	printf("list length %d\n",GetLength(list));
	
	Destory(&list);
	return 0;
}


这里写图片描述
代码编译使用软件为Dev-cpp,代码与实际开发一定有不同,但是写代码的目的主要是为了理解数据结构的思想并掌握它。

文件结构

linklist.h(定义List基本操作)
main.c(编写main函数进行测试)

祝愿18考研学生成功。

数据结构1800题1. 算法的计算量的大小称为计算的( )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( )【中科院计算所 1998 二、1 (2分)】 A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分) 【武汉交通科技大学 1996 一、1( 4分)】 4.一个算法应该是( )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值