欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表的顺序存储

程序员文章站 2022-07-14 19:57:43
...

链表的顺序存储无非就是在一个结构体数组里面集成了许多函数的操作,使之算法变得更加简单。

#include<stdio.h>
#include<windows.h>
#define maxsize 100
typedef int datatype;
typedef struct {
	datatype a[maxsize];
	int size;
}sequence_list;
 
void init(sequence_list* slt) {
	slt->size=0;
}//值空表。

void append(sequence_list* slt,datatype x) {
	if(slt->size==maxsize) {
		printf("顺序表是满的!");
		exit(1); 
	}
	slt->a[slt->size]=x;
	slt->size=slt->size+1;
}//顺序表后部进行插入操作。

void display(sequence_list slt) {
	int i;
	if(!slt.size)
		printf("\n顺序表是空的!");
	else
		for(i=0;i<slt.size;i++)
			printf("%5d",slt.a[i]);
}//打印顺序表的各个节点值。

int empty(sequence_list slt) {
	return (slt.size==0?1:0);
}//判断顺序表是否为空。

int find(sequence_list slt,datatype x) {
	int i=0;
	while(i<slt.size&&slt.a[i]!=x) i++;
	return (i<slt.size?i:-1);
}//查找顺序表中值为x的节点位置。

datatype get(sequence_list slt,int i) {
	if(i<0||i>=slt.size) {
		printf("\n指定位置的节点不存在!");
		exit(1);
	}
	else
		return slt.a[i];
}//取得顺序表中第i个节点的值。

void insert(sequence_list *slt,datatype x,int position) {
	int i;
	if(slt->size==maxsize) {
		printf("\n顺序表满了,没办法插入!");
		exit(1);
	}
	if(position<0||position>slt->size) {
		printf("\n指定的位置不存在!");
		exit(1);
	}
//	for(i=slt->size;i>position;i--) {
//		slt->a[position]=x;
//		slt->size++;
//	}
	for(i=slt->size;i>position;i--) {
		slt->a[i]=slt->a[i-1];
	}
	slt->size++;
	slt->a[position]=x;
}//在顺序表的position位置插入值为x的节点。

void dele(sequence_list *slt,int position) {
	int i;
	if(slt->size==0) {
		printf("\n顺序表是空的!");
		exit(1); 
	}
	if(position<0||position>=slt->size) {
		printf("\n指定的删除位置不存在!");
		exit(1);
	}
	for(i=position;i<slt->size-1;i++)
		slt->a[i]=slt->a[i+1];
	slt->size--;
}//删除表中第position位置的节点。


int main()
{
	return 0;
}