链表操作

来源:互联网 发布:sql 用变量作为字段名 编辑:程序博客网 时间:2024/06/05 11:26


 


#include"stdafx.h"
#include "stdio.h"
#include "malloc.h"
typedef struct  node
{
 int ID;
 int value;
 int visit_num;
 struct  node * next;
 //struct  node * pre;
}Node;
Node *head=(Node *)malloc(sizeof(Node));
unsigned int Dele_Mode=0,Men_Num=0,Crrent_Num=0;
void Creat(int ID_Count,int mode)// 创建头结点
{
 Dele_Mode=mode;
 head->next=NULL;
 //head->pre=NULL;
 Men_Num=ID_Count;;
 return;
}
//void insert_last(int ID_Num,int value)
//{
//  Node *New_Node=(Node *)malloc(sizeof(Node));
//  New_Node->ID=ID_Num;
//  New_Node->value=value;
//  New_Node->visit_num=1;
//  New_Node->next=NULL;
//}
int Set_Num(int ID_Num,int value)//插入结点
{
 if(head==NULL)
  return -1;
 Node *p=head,*q=p,*pre=NULL,*temp=NULL;
 int find_flag=0,Min_Count=0;//找到相同的为1;;
 if(head==NULL)
  return -1;
 //for(int i=0;i<Crrent_Num;i++)//遍历,找是否有相同的ID

 while(p->next)
 {
  if(p->ID==ID_Num)//有相同ID
  {
   find_flag=1;
  }
  else if(find_flag==0)
  {
   pre=q;
   q=q->next;
  }
  p=p->next;
  
 }
 if(find_flag==1||p->ID==ID_Num)//有相同的,进行替换
 {
  Node *New_Node=(Node *)malloc(sizeof(Node));
  New_Node->ID=ID_Num;
  New_Node->value=value;
  New_Node->visit_num=1;
  New_Node->next=NULL;
  
  p->next=New_Node;
  pre->next=q->next;
  free(q);
  return 0;
  
 }
 else//没有相同的
 {
  if(Crrent_Num<Men_Num)//还没有满
  {
  Node *New_Node=(Node *)malloc(sizeof(Node));
  New_Node->ID=ID_Num;
  New_Node->value=value;
  New_Node->visit_num=1;
  New_Node->next=NULL;
   
  p->next=New_Node;
  Crrent_Num++;
  }
  else//已经满了
  {
   if(Dele_Mode==0)//LRU淘汰
   {
     Node *New_Node=(Node *)malloc(sizeof(Node));
     New_Node->ID=ID_Num;
     New_Node->value=value;
     New_Node->visit_num=1;
     New_Node->next=NULL;
     p->next=New_Node;

     temp=head->next;
     head->next=temp->next;
     free(temp);

   }
   else//COUNT淘汰
   {
    p=head;
    q=p;
    pre=NULL;
    Min_Count=head->next->visit_num;
    while(p->next)
    {
     if(p->visit_num<Min_Count)
     {
      Min_Count=p->visit_num;
     }
     p=p->next;
    }
   }
  }
  
 }
 return 0;
}
int Get_ID(int ID_Num,int *value)
{
 Node *p=head,*q=p,*pre=NULL,*temp=NULL;
 int find_flag=0;
 if(head==NULL)
  return -1;
 while(p->next)
 {
  if(p->ID==ID_Num)//有相同ID
  {
   p->visit_num++;
   *value=p->value;
   find_flag=1;
  }
  else if(find_flag==0)
  {
   pre=q;
   q=q->next;
  }
  p=p->next;
  
 }
 if(find_flag==1)//在最后一个之前的结点找到
 {
  pre->next=q->next;
  p->next=q;
  q->next=NULL;
  return 0;
 }
 else if(p->ID==ID_Num) //最后一个结点找到ID
 {
   p->visit_num++;
   *value=p->value;
   return 0;
 }
  
}
int destory()
{
 if(head==NULL)
  return -1;
 Node *temp=head->next;
 while(temp)
 {
  head->next=temp->next;
  free(temp);
  temp=head->next;
 }
 return 0;
}
void main()
{
 int a;
 Creat(3,0);
 Set_Num(1,1);
 Set_Num(1,10);
 Set_Num(1,10);
 Set_Num(2,20);
 Set_Num(3,30);
 Set_Num(4,40);
 Get_ID(4,&a);
 Get_ID(3,&a);
 Get_ID(2,&a);
}

 

 

0 0
原创粉丝点击