链表操作
来源:互联网 发布: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);
}
- 实现链表基本操作(简单操作)
- 链表操作源程序
- 链表操作
- C++ 链表操作
- 链表的操作
- 链表操作源程序
- 链表的操作
- 链表的操作
- C++链表操作
- 链表操作
- 链表操作
- 链表基本操作
- LinkList链表操作
- 合并链表操作
- 链表简单操作
- 链表的操作
- 链表操作
- 操作链表
- 深度优先搜索(Depth-First-Search)
- Leetcode: Remove Linked List Elements
- linux常用命令二之权限,搜索与帮助命令
- IIS下安装PHP
- Android APK安装常见错误列表
- 链表操作
- [ios]the file couldn't be opened because you don't have permission to view it
- 格雷码 Gray
- nginx源码分析1———进程间的通信机制五(文件锁)
- 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
- spring读取配置文件
- YUV格式学习:YUV444转换RGB24
- js改变html的原有内容
- Ext通过按钮创建一个Window实例代码