zoukankan      html  css  js  c++  java
  • _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("
    ");
    }
    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
    ",e);
    	printf("删除元素后静态链表中的元素:");
    	PrintDList(L,len);
    	system("pause");
    }

  • 相关阅读:
    python
    图片放大,缩小等操作
    template-web.js 自定义过滤器
    python
    python
    Android Volley源码分析及扩展
    Android 6.0动态权限申请教程
    Jarsigner签名使用
    Python正则表达式(总)
    Python错误和异常概念(总)
  • 原文地址:https://www.cnblogs.com/javafly/p/6037161.html
Copyright © 2011-2022 走看看