以下是一个单链表,包括单链表的建立,插入,查找,删除
由于刚开始接触链表,如有错误,还请谅解
此为整体框架
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int date;
struct node *next;
}liklistnode;
liklistnode *initialize(void);//初始化单链表
liklistnode *creat(int n);//尾插法建立单链表
liklistnode *locate(liklistnode *head,int key);//按值查找结点
liklistnode *get(liklistnode *head,int i);//按序号查找结点
void insert_After(liklistnode * Ptr,int x);//在指定位置后插入结点
void insert_Before(liklistnode *head,liklistnode *Ptr,int x);//在指定位置前插入结点
liklistnode *delete_After(liklistnode *Ptr);//删除指定结点的后续结点
liklistnode *delete_i(liklistnode *head,int i);//删除第i个结点
int main()
{
return 0;
}
liklistnode *initialize(void);//初始化单链表
liklistnode *initialize(void)
{
liklistnode *head;
head = (liklistnode*)malloc(sizeof(liklistnode));
if(head == NULL)
return 0;
head->next=NULL;
return 0;
}
liklistnode *creat(int n);//尾插法建立单链表
liklistnode *creat(int n)
{
liklistnode *head,*p,*q;
head = (liklistnode*)malloc(sizeof(liklistnode));
q = head;
for(int i = 0;i<n;i++)
{
p = (liklistnode*)malloc(sizeof(liklistnode));
p->date = 0;
q->next = p;
q = p;
}
return head;
}
liklistnode *locate(liklistnode *head,int key);//按值查找结点
liklistnode *locate(liklistnode *head,int key)
{
liklistnode *p;
p = head->next;
while(p!=NULL&&p->date != key)
p=p->next;
return p;
}
liklistnode *get(liklistnode *head,int i);//按序号查找结点
liklistnode *get(liklistnode *head,int i)
{
int j = 0;
liklistnode *p=head;
if(i == 0)
return NULL;
while(j < i&&p->next != NULL)
{
p=p->next;
j++;
}
if(i == j)
return p;
else return NULL;
}
void insert_After(liklistnode * Ptr,int x);//在指定位置后插入结点
void insert_After(liklistnode * Ptr,int x)
{
liklistnode *s = (liklistnode*)malloc(sizeof(liklistnode));
s->date = x;
s->next = Ptr->next;
Ptr->next = s;
}
void insert_Before(liklistnode *head,liklistnode *Ptr,int x);//在指定位置前插入结点
void insert_Before(liklistnode *head,liklistnode *Ptr,int x)
{
liklistnode *s,*qPtr;
s = (liklistnode*)malloc(sizeof(liklistnode));
s->date = x;
qPtr = head;
while(qPtr->next != Ptr)
qPtr = qPtr->next;
qPtr->next = s;
}
liklistnode *delete_After(liklistnode *Ptr);//删除指定结点的后续结点
liklistnode *delete_After(liklistnode *Ptr)
{
liklistnode *fPtr;
fPtr = Ptr->next;
Ptr->next = fPtr->next;
return fPtr;
}
liklistnode *delete_i(liklistnode *head,int i);//删除第i个结点
liklistnode *delete_i(liklistnode *head,int i)
{
liklistnode *Ptr,*qPtr = NULL;
Ptr = get(head,i-1);
if(Ptr != NULL&&Ptr->next != NULL)
qPtr = delete_After(Ptr);
return qPtr;
}
THE END
暂无评论内容