静态链表

静态链表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;
}

 

你可能感兴趣的:(静态链表)