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");
    }

  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/javafly/p/6037161.html
Copyright © 2011-2022 走看看