`

静态链表

 
阅读更多

静态链表staticList.h

#include <stdio.h>
#define MAXSIZE 1000
#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1

typedef int Status;
typedef int ElemType;

typedef struct{
	ElemType data;		//数据
	int cur;			//游标(Cursor)
} Component,StaticLinkList[MAXSIZE];

void ShowMenu();

void ShowList(StaticLinkList space);

Status InitList(StaticLinkList space);

int Malloc_SLL(StaticLinkList space);

int ListLength(StaticLinkList space);

Status ListInsert(StaticLinkList space,int i,ElemType e);

Status ListDelete(StaticLinkList space,int i);

void Free_SLL(StaticLinkList sppace,int k);

 staticList.c

#include "staticList.h"

int main(){
	int cmd,i;
	ElemType e;
	StaticLinkList space;
	ShowMenu();
	scanf("%d",&cmd);
	while(cmd){
		switch(cmd){
		case 1:
			InitList(space);
			break;
		case 2:
			ShowList(space);
			break;
		case 3:
			printf("请输入插入位置和数据:");
			scanf("%d %d",&i,&e);
			if(!i){
				break;
			}
			if(ListInsert(space,i,e)!=OK){
				printf("插入失败!\n");
			}
			while(i){
				printf("请输入插入位置和数据:");
				getchar();
				scanf("%d %d",&i,&e);
				if(!i){
					break;
				}
				if(ListInsert(space,i,e)!=OK){
					printf("插入失败!\n");
				}
			}
			break;
		case 4:
			printf("请输入删除元素的位置:");
			scanf("%d",&i);
			if(!i){
				break;
			}
			if(ListDelete(space,i)!=OK){
				printf("删除失败!\n");
			}
			while(i){
			printf("请输入删除元素的位置:");
			getchar();
			scanf("%d",&i);
			if(!i){
				break;
			}
			if(ListDelete(space,i)!=OK){
				printf("删除失败!\n");
			}
			}
			break;
		case 0:exit(0);break;
		default:exit(-1);break;
		}
		ShowMenu();
		getchar();
		scanf("%d",&cmd);
	}
	
	return 0;
}

void ShowMenu(){
	char *str="\t\t*******************************";
	printf("%s\n",str);
	printf("\t\t1.初始化链表\n");
	printf("\t\t2.显示链表数据\n");
	printf("\t\t3.插入数据\n");
	printf("\t\t4.删除数据\n");
	printf("\t\t0.退出\n");
	printf("%s\n",str);
}

void ShowList(StaticLinkList space){
	int i,j,k;
	j=0;
	k=space[0].cur;
	i=space[MAXSIZE-1].cur;
	if(i!=0){
		printf("\t\t");
		while(i){
			if(j%5==0){
				printf("\n");
				printf("\t\t");
			}
			j++;
			printf("%d  ",space[i].data);
			i=space[i].cur;
		}
		
		printf("\n");
	}else{
		printf("\t\t空表\n");
	}
}

Status InitList(StaticLinkList space){
	int i;
	for(i=0;i<MAXSIZE-1;i++){
		space[i].cur=i+1;
	}
	space[MAXSIZE-1].cur=0;
	return OK;
}

int Malloc_SLL(StaticLinkList space){
	int i=space[0].cur;
	if(space[0].cur){
		space[0].cur = space[i].cur;
	}
	return i;
}

int ListLength(StaticLinkList space){
	int i,j,length;
	i=space[MAXSIZE-1].cur;
	length=0;
	if(i==0){
		length=0;
	}else{
		j=space[0].cur;
		while(i){
			length++;
			i=space[i].cur;
		}
	}
	return length;
}

Status ListInsert(StaticLinkList space,int i,ElemType e){
	int j,k,l;

	k=MAXSIZE-1;

	if(i<1||i>ListLength(space)+1){
		return ERROR;
	}
	j=Malloc_SLL(space);

	if(j){
		
		space[j].data=e;
		for(l=1;l<i;l++){
			k=space[k].cur;
		}
		space[j].cur=space[k].cur;
		space[k].cur=j;
		return OK;
	}

	return ERROR;
}

Status ListDelete(StaticLinkList space,int i){
	int j,k;

	k=MAXSIZE-1;

	if(i<1||i>ListLength(space)){
		return ERROR;
	}
	
	for(j=1;j<i;j++){
		k=space[k].cur;
	}
	j=space[k].cur;
	space[k].cur=space[j].cur;

	Free_SLL(space,j);

	return OK;
	
}

void Free_SLL(StaticLinkList space,int k){
	space[k].cur=space[0].cur;
	space[0].cur=k;
}

 

分享到:
评论

相关推荐

    静态链表 C实现

    静态链表是一种在内存中预先分配好固定大小的存储空间,并通过指针链接节点的数据结构。在C语言中,静态链表的实现通常涉及到结构体、指针和数组的运用。下面将详细介绍静态链表的概念、优点、缺点以及如何用C语言...

    静态链表C语言实现

    静态链表是一种特殊形式的数据结构,通常在内存空间有限或者需要预分配所有元素的情况下使用。相较于动态链表,静态链表在内存管理上有所不同,因为它的节点是在编译时静态分配的。下面将详细讨论静态链表的实现及其...

    C语言数据结构 静态链表

    静态链表的实现和操作 静态链表是一种常用的数据结构,静态链表是指在程序设计中,链表的结点是预先分配的,且链表的长度固定不变。静态链表的优点是可以快速地插入、删除元素,并且可以避免动态分配内存带来的开销...

    静态链表的创建

    在C语言中,静态链表是一种特殊的链表实现方式,与传统的动态链表不同,它在编译时就分配了所有节点的内存空间。这种数据结构在某些情况下能提供更高效的内存管理和操作,尤其是在内存有限或者对内存分配有特殊要求...

    c语言实现静态链表

    c语言实现的静态链表

    静态链表的操作

    静态链表是一种特殊类型的数据结构,主要用于实现线性数据集合。与动态链表不同,静态链表的存储空间在编译时就已经固定,这使得它在某些场景下具有一定的优势。以下是对静态链表操作的详细说明: 1. 增加元素:在...

    数据结构笔记之线性表(-):静态链表表示与实现

    静态链表与传统的动态链表不同,动态链表中的节点在内存中是分散存储的,而静态链表的所有节点存储在预先分配的连续内存空间中。这种设计提供了更高效的内存管理,但同时也限制了表的大小,因为必须在编译时就确定表...

    静态链表的使用

    ### 静态链表的使用 #### 一、静态链表的概念与特点 静态链表是一种特殊的数据结构,它结合了链表和数组的特点。通常,在编程中链表是通过指针连接各个节点实现的,而静态链表则是利用数组来模拟链表的行为。在...

    静态链表和动态链表详细讲解教程

    静态链表和动态链表详细讲解教程 本资源讲解了链表的基本概念和实现方式,着重介绍了静态链表和动态链表的区别和应用场景。链表是一种常见的数据结构,它由多个节点组成,每个节点都包含一个数据域和一个指向下一个...

    静态链表基本操作

    静态链表是一种在内存中预先分配好固定数量节点的数据结构,与动态链表不同,它不依赖于堆内存的分配。这种数据结构在某些特定情况下,如资源受限或需要高效预分配的情况,可能会有优势。在本场景中,我们探讨的是...

    一、静态链表的定义 二、静态链表的设计 三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌

    静态链表一、静态链表的定义 二、静态链表的设计 三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌生呢?本文将较为详细的向你介绍它,感兴趣的话就一起来看看吧。 一、静态链表的定义 ...

    数据结构之静态链表的实现

    静态链表是一种特殊的链式存储结构,它与传统的动态链表不同,因为它在编译时就固定了存储空间,常用于内存有限或者需要预先分配所有元素的场合。在这个实现中,我们将探讨静态链表的基本操作,包括初始化、查找、...

    数据结构(C语言版)---静态链表

    静态链表是一种特殊的链式数据结构,它与常规动态链表有所不同,主要在于存储方式和内存分配。 静态链表,顾名思义,与动态链表相对,其链表节点是在编译时静态分配的,而不是在运行时动态分配。这种设计减少了动态...

    静态链表的实现

    对于线性链表,也可用一维数组来进行描述。这种描述方法便于在没有指针类型的高级程序设计...用数组描述的链表,即称为静态链表。在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标CUR。

    静态链表的删除 静态

    本程序适合初学者学习和模仿的一个静态链表的删除的生成过程。。。。

    静态链表实现

    静态链表是一种特殊形式的数据结构,它在C和C++编程中被用于组织和操作数据。与传统的动态链表不同,静态链表的节点不是在运行时动态分配内存,而是在编译时就预设了存储空间。这种实现方式使得静态链表在某些情况下...

    静态链表C语言代码实现

    关于严蔚敏版数据结构的静态链表的代码实现,C语言实现

Global site tag (gtag.js) - Google Analytics