⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 link_list.h

📁 dijkstra算法的链表实现,另外需要include一个头文件,稍后上传
💻 H
字号:
#include <stdio.h>
#include <malloc.h>
typedef float ListEntry;

typedef struct listnode{
   ListEntry entry;
   struct listnode *next;
} ListNode;

typedef struct list {
   ListNode *head;
} List; 

void CreateList(List *list);
void InsertList( ListEntry x,int p, List *list);
bool ListEmpty(List *list);
ListEntry GetList(int position,List *list);
void DeleteList(ListEntry *p,int position,List *list);
int ListSize (List *list);
ListNode *SetPosition(int position,List *list);


void CreateList(List *list)
{
	list -> head = NULL;
}

void InsertList(ListEntry x, int p, List *list)
{
   ListNode *newnode, *last;
   last = list -> head;
   if (p < 0 || p > ListSize(list))
        printf("Attempt to insert in a position not in the list.");
   else if (ListEmpty(list))
   {
	   newnode = (ListNode *)malloc(sizeof(ListNode));
	   newnode -> entry = x;
	   newnode -> next = NULL;
	   list -> head = newnode;
   }
   else 
   {
	   newnode =(ListNode *)malloc(sizeof(ListNode));
	   newnode -> entry = x;
	   if (p == 0)
	   {
		   newnode -> next = list -> head;
		   list -> head = newnode;
	   }
	   else
	   {
		   last = SetPosition(p - 1,list);
		   if (p == ListSize(list))
			   newnode -> next = NULL;
		   else
			   newnode -> next = last -> next;
		   last -> next = newnode;
	   }
   }
}

bool ListEmpty(List *list)
{
	return (ListSize(list) == 0);
}

ListEntry GetList(int position,List *list)
{
	ListNode *ptr;
	ptr = SetPosition(position,list);
	return ptr -> entry;
}

void DeleteList(ListEntry *p,int position,List *list)
{
	ListNode *last,*current;
	last = list -> head;
	if (position < 0 || position > ListSize(list) - 1)
        printf("Attempt to delete an entry not in the list.");
	 else if (ListEmpty(list))
		 printf("Attempt delete entry from an enpty list.");
	 else if (position == 0)
	 {
		 *p = list -> head -> entry;
		 list -> head = list -> head -> next;
	 }
	 else
	 {
		 last = SetPosition(position - 1,list);
		 current = last -> next;
		 *p = current -> entry;
		 if(position == ListSize(list) - 1)
			 last -> next = NULL;
		 else
			 last -> next = current -> next;
		 free(current);
	 }
}

ListNode *SetPosition(int position,List *list)
{
	int i;
	ListNode *ptr;
	ptr = list -> head;
	for (i = 0;i < position;i++)
	{
		ptr = ptr -> next;
	}
	return ptr;
}


int ListSize (List *list)
{
	ListNode *m;
	int size;
	m = list -> head;
	if (m == NULL)
		size = 0;
	else
		for(size = 1;m -> next != NULL;m = m -> next,size++);
	return size;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -