_DataStructure_C_Impl:静态链表

//静态链表
#include<stdio.h>
#include<stdlib.h>
#define ListSize 10
typedef char DataType;
//静态链表结点类型定义
typedef struct{
	DataType data;//数据域
	int cur;// 游标,类似指针域
}SListNode;
//静态链表类型定义
typedef struct{
	SListNode list[ListSize];
	int av;//备用链表
}SLinkList;
//静态链表初始化
void InitSList(SLinkList *L){
	int i;
	for(i=0;i<ListSize;i++){
		(*L).list[i].cur=i+1;
	}
	(*L).list[ListSize-1].cur=0;
	(*L).av=1;//
}
//从备用链表中取下一个结点空间,分配给要插入链表中的元素
int AssignNode(SLinkList L){
	int i;
	i=L.av;
	L.av=L.list[i].cur;
	return i;
}
//使空闲结点成为备用链表中的结点
void FreeNode(SLinkList L,int pos){
	L.list[pos].cur=L.av;
	L.av=pos;
}
//插入操作
void InsertSList(SLinkList *L,int i,DataType e){
	int j,k,x;
	k=(*L).av;
	(*L).av=(*L).list[k].cur;
	(*L).list[k].data=e;
	j=(*L).list[0].cur;
	for(x=1;x<i-1;x++)
		j=(*L).list[j].cur;
	(*L).list[k].cur=(*L).list[j].cur;
	(*L).list[j].cur=k;
}
//删除操作
void DeleteSList(SLinkList *L,int i,DataType *e){
	int j,k,x;
	j=(*L).list[0].cur;
	for(x=1;x<i-1;x++)
		j=(*L).list[j].cur;
	k=(*L).list[j].cur;
	(*L).list[j].cur=(*L).list[k].cur;
	(*L).list[k].cur=(*L).av;
	*e=(*L).list[k].data;
	(*L).av=k;
}
//输出双向循环链表中的每一个元素
void PrintDList(SLinkList L,int n){
	int j,k;
	k=L.list[0].cur;
	for(j=1;j<=n;j++){
		printf("%4c",L.list[k].data);
		k=L.list[k].cur;
	}
	printf("\n");
}
void main(){
	SLinkList L;
	int i,len;
	int pos;
	char e;
	DataType a[]={'A','B','C','D','E','F','H'};
	//DataType a1[]={1,2,3,4,5,6,7,8};
	len=sizeof(a)/sizeof(a[0]);
	InitSList(&L);
	for(i=1;i<=len;i++)
		InsertSList(&L,i,a[i-1]);
	printf("静态链表中的元素:");
	PrintDList(L,len);
	printf("输入要插入的元素及位置:");
	scanf("%c",&e);
	getchar();
	scanf("%d",&pos);
	getchar();
	InsertSList(&L,pos,e);
	printf("插入元素后静态链表中的元素:");
	PrintDList(L,len+1);

	printf("输入要删除元素的位置:");
	scanf("%d",&pos);
	getchar();
	DeleteSList(&L,pos,&e);
	printf("删除的元素是:");
	printf("%c\n",e);
	printf("删除元素后静态链表中的元素:");
	PrintDList(L,len);
	system("pause");
}

转载于:https://www.cnblogs.com/javafly/p/6037161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值