#include <stdio.h>
#include <malloc.h>
#define DEFAULT_SIZE 5
typedef struct StaticLinkedNode
{
char data;
int next;
} *NodePtr;
typedef struct StaticLinkedList
{
NodePtr nodes;
int* used;
} *ListPtr;
ListPtr initLinkedList()
{
ListPtr tempPtr=(ListPtr)malloc(sizeof(struct StaticLinkedList));
//创建头节点
//为其分配一个固定的空间
tempPtr->nodes =(NodePtr)malloc(sizeof(struct StaticLinkedNode) *DEFAULT_SIZE);
tempPtr->used=(int*)malloc(sizeof(int) * DEFAULT_SIZE);
//头节点初始化
tempPtr->nodes[0].data ='\0';
tempPtr->nodes[0].next =-1;
tempPtr->used[0]=1;//表示第一个节点已被占用
for(int i=1;i<DEFAULT_SIZE;i++)
{
tempPtr->used[i]=0;//表示对应空间未被占用
}
return tempPtr;
}
void printList(ListPtr paraListPtr)
{
int p=0;
while(p!=-1)
{
printf("%c",paraListPtr->nodes[p].data );
p=paraListPtr->nodes[p].next ;
}
printf("\r\n");
}
void insertElement(ListPtr paraListPtr,char paraChar,int paraPosition)
{
int q,p,i;
p=0;
for(i=0;i<paraPosition;i++)
{
p=paraListPtr->nodes[p].next ;
if(p==-1)
{
printf("The position %d is beyond the scope of the list.\r\n",paraPosition);
return;
}
}
for(i=1;i<DEFAULT_SIZE;i++)
{
if(paraListPtr->used[i]==0)
{
printf("Space at %d allocated.\r\n",i);//第i位可分配
paraListPtr->used[i]=1;
q=i;
break;
}
}
if(i==DEFAULT_SIZE)
{
printf("No space.\r\n");
return;
}
paraListPtr->nodes[q].data =paraChar;
printf("linking\r\n");
paraListPtr->nodes[q].next =paraListPtr->nodes[p].next ;
paraListPtr->nodes[p].next =q;
}
void deleteElement(ListPtr paraListPtr,char paraChar)
{
int p,q;
p=0;
while((paraListPtr->nodes[p].next !=-1)&&(paraListPtr->nodes[paraListPtr->nodes[p].next ].data !=paraChar))
{
p=paraListPtr->nodes[p].next ;
}
if(paraListPtr->nodes[p].next ==-1)
{
printf("Cannot delete %c\r\n",paraChar);
return;
}
q=paraListPtr->nodes[p].next ;
paraListPtr->nodes[p].next =paraListPtr->nodes[paraListPtr->nodes[p].next].next ;
paraListPtr->used[q]=0;
}
void appendInsertDeleteTest()
{
ListPtr tempList=initLinkedList();
printList(tempList);
insertElement(tempList,'H',0);
insertElement(tempList,'e',1);
insertElement(tempList,'l',2);
insertElement(tempList,'l',3);
insertElement(tempList,'o',4);
printList(tempList);
printf("Deleting 'e'.\r\n");
deleteElement(tempList,'e');
printf("Deleting 'a'.\r\n");
deleteElement(tempList,'a');
printf("Deleting 'o'.\r\n");
deleteElement(tempList,'o');
printList(tempList);
insertElement(tempList,'x',1);
printList(tempList);
}
int main()
{
appendInsertDeleteTest();
return 0;
}
数据结构-静态链表
于 2024-04-23 19:11:33 首次发布