📄 link_list.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 + -