共享链表
来源:互联网 发布:淘宝公益宝贝有什么用 编辑:程序博客网 时间:2024/04/30 05:51
#include <stdio.h>
#include <stdlib.h>
#define offsetof1(S_TYPE) ((int)&((S_TYPE *)0)->list1)
#define offsetof2(S_TYPE) ((int)&((S_TYPE *)0)->list2)
typedef struct note
{
struct note *front;
struct note *next;
}NOTE;
typedef struct _tv
{
int num;
NOTE list1;
NOTE list2;
}TV;
TV * container_of(NOTE *pb,int member)
{
TV * ret;
NOTE *mptr = pb;
if(member==1)
{
ret = (TV *)((char *)mptr - offsetof1(TV));
}
else if(member==2)
{
ret = (TV *)((char *)mptr - offsetof2(TV));
}
return ret;
}
NOTE * insert_link(NOTE *p_head,NOTE *p_new)
{
NOTE *p_mov=p_head;
if(p_head==NULL)
{
p_head=p_new;
(p_head)->next=p_head;
(p_head)->front=p_head;
}
else
{
p_new->front=p_mov->front;
p_new->next=p_mov;
p_mov->front->next=p_new;
p_mov->front=p_new;
}
return p_head;
}
NOTE * init_link(NOTE *p_head,int num)
{
int i;
for(i=0;i<num;i++)
{
TV *p_new=(TV*)malloc(sizeof(TV));
p_new->num=i;
p_head=insert_link(p_head,&(p_new->list1));
}
return p_head;
}
void link_print_next(NOTE *head,int flag)
{
NOTE *p_mov=head;
TV *tv_p;
if(head==NULL)
printf("没有台");
else
{
while(p_mov->next!=head)
{
tv_p=container_of(p_mov,flag);
printf("tv_num=%d\n",tv_p->num);
p_mov=p_mov->next;
}
tv_p = container_of(p_mov,flag);
printf("tv_num=%d\n",tv_p->num);
printf("\n\n\n");
}
}
void link_print_front(NOTE *head,int flag)
{
NOTE *p_mov=head;
TV *tv_p;
if(head==NULL)
printf("没有台");
else
{
while(p_mov->front!=head)
{
tv_p=container_of(p_mov,flag);
printf("tv_num=%d\n",tv_p->num);
p_mov=p_mov->front;
}
tv_p = container_of(p_mov,flag);
printf("tv_num=%d\n",tv_p->num);
printf("\n");
}
}
NOTE *delet_tv(NOTE **p_head,NOTE *tv_now)
{
NOTE*temp;
if(*p_head==tv_now)
{
*p_head=tv_now->next;
(*p_head)->front=tv_now->front;
tv_now->front->next=*p_head;
}
else
{
tv_now->front->next=tv_now->next;
tv_now->next->front=tv_now->front;
}
TV *tv_p=container_of(tv_now,1);
printf("the delete num is %d\n",tv_p->num);
temp=tv_now->next;
free(tv_p);
return temp;
}
void link_tv_save(NOTE **p_head2,NOTE *p_new)
{
TV* p_mov=container_of(p_new,1);
printf("the cellect num is %d\n",p_mov->num);
*p_head2=insert_link(*p_head2,&(p_mov->list2));
}
int main()
{
int num,m;
NOTE *tv_head=NULL,*tv_now,*tv_head2=NULL;
printf("初始化电台\n");
scanf("%d",&num);
tv_head=init_link(tv_head,num);
link_print_next(tv_head,1);
link_print_front(tv_head,1);
tv_now =tv_head;
while(1)
{
printf("\n1:下一个台,2:上一个台,3删除当前台,4收藏,5退出");
scanf("%d",&num);
TV *tv_p;
switch(num)
{
case 1:
tv_now=tv_now->next;
tv_p=container_of(tv_now,1);
printf("tv_num=%d\n",tv_p->num);
break;
case 2:
tv_now=tv_now->front;
tv_p=container_of(tv_now,1);
printf("tv_num=%d\n",tv_p->num);
break;
case 3:
tv_now=delet_tv(&tv_head,tv_now);
printf("delete in there\n");
link_print_next(tv_head,1);
break;
case 4:
link_tv_save(&tv_head2,tv_now);
link_print_next(tv_head2,2);
break;
case 5:
exit(0);
break;
}
}
return 0;
}
- 进程共享链表
- 共享链表
- 不同进程共享链表方法:用共享内存创建链表
- 共享池---LRU链
- 文件共享表
- 共享
- 共享
- 共享
- 共享
- 关于多进程共享一个链表的问题
- 自己写的共享内存链表CAlgShareList
- 一种线程同步共享链表的方式----waitlist
- 如何缩小共享表空间
- [下载]好书共享:《物流供应链》
- [下载]好书共享:《物流供应链》
- [下载]好书共享:《物流供应链》
- [下载]好书共享:《物流供应链》
- [下载]好书共享:《物流供应链》
- HIVE之Serde和Inspector介绍
- 发现一个很好的图片占位工具网。placehold.it
- Vim学习资源汇总
- 万能排序----快速排序
- synchronized4种用法
- 共享链表
- 官崇拜因何不绝 隐性福利勾人心
- 如何等待java线程池中所有任务完成
- poj 2377 Bad Cowtractors(kruscal最小生成树存在性)
- cocos2d-x iphone5s版碰到的问题
- eclipse启动tomcat无法访问
- Gitblit进行Git管理
- 大话USB驱动之基础概念
- Android工程下的子目录解析