创建一个静态链表,通过输入元素及位置插入一个元素,然后通过输入删除元素的位置删除元素。

来源:互联网 发布:阿里云代码托管 收费 编辑:程序博客网 时间:2024/05/16 09:02

头文件:函数的声明

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LISTSIZE 100typedef char ElemType;typedef struct{ElemType data;//数据域int cur;//指针域,指向直接后继元素}SListNode;//结点空间typedef struct{SListNode list[LISTSIZE];//数组int av;//备用链表的指针}SLinkList;//链表空间void InitSList(SLinkList *L);//静态链表初始化int AssignNode(SLinkList L);//分配结点void FreeNode(SLinkList L,int pos);//回收结点void InsertSList(SLinkList *L,int i,ElemType e);//插入操作void DeleteSList(SLinkList *L,int i,ElemType *e);//删除操作void PrintDList(SLinkList L,int n);//输出静态链表



函数的定义

#include "静态链表.h"void InitSList(SLinkList *L)//静态链表初始化{int i;for(i = 0;i < LISTSIZE;i++){(*L).list[i].cur = i+1;}(*L).list[LISTSIZE].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,ElemType 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,ElemType *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");}


函数的应用

#include "静态链表.h"void InitSList(SLinkList *L)//静态链表初始化{int i;for(i = 0;i < LISTSIZE;i++){(*L).list[i].cur = i+1;}(*L).list[LISTSIZE].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,ElemType 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,ElemType *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");}


0 0
原创粉丝点击