资源简介
多线程实现双向链表的增删改 其中的信号量设成一个也行- -
代码片段和文件信息
#include
#include
#include
#include
HANDLE sem;
HANDLE tem;
HANDLE uem;
HANDLE vem;
typedef int Datatype;
typedef struct Point
{
struct Point *prior *next;
Datatype number;
}Point *Pointlist;
typedef struct ProcParam
{
Pointlist a;
};
Pointlist InitList()
{
srand((unsigned)time(NULL));
Pointlist head;
Datatype data;
head = (Pointlist)malloc(sizeof(Point));
head->number = NULL;
head->prior = NULL;
head->next = NULL;
return head;
}
Insert(Pointlist head)
{
int i = 0;
WaitForSingleobject(sem INFINITE);
srand((unsigned)time(NULL));
Pointlist p1 p2;
p1 = head;
if (p1->number == NULL)
{
p1->number = (rand() % 10) + 1;
printf(“插入元素%d\n“ p1->number);
Sleep(500);
}
else
while (p1->next != NULL)
{
p1 = p1->next;
}
for (i = 0; i < 3; i++)
{
p2 = (Pointlist)malloc(sizeof(Point));
p2->prior = p1;
p1->next = p2;
p2->number = (rand() % 10 + 1);
p2->next = NULL;
p1 = p2;
printf(“插入元素%d\n“ p2->number);
Sleep(500);
}
ReleaseSemaphore(sem 1 NULL);
return head;
}
Pointlist find(Pointlist head)
{
WaitForSingleobject(vem INFINITE);
srand((unsigned)time(NULL));
Pointlist p;
p = head;
int i = 1 c = (rand() % 10) + 2;
printf(“查找元素%d的位置\n“c);
while (p != NULL && p->number != c)
{
++i;
p = p->next;
}
if (p == NULL)
{
printf(“无此节点\n“);
ReleaseSemaphore(vem 1 NULL);
return 0;
}
else
printf(“在链表中的位置为:%d\n“ i);
ReleaseSemaphore(vem 1 NULL);
}
Pointlist Insert2(Pointlist head)
{
WaitForSingleobject(tem INFINITE);
int i a;
srand((unsigned)time(NULL));
i = (rand() % 10) + 2;
a = (rand() % 10);
printf(“在位置%d中插入元素%d\n“ i a);
Sleep(500);
Pointlist p s;
p = head;
int tempi;
if (i>10)
{
printf(“无此位置的节点\n“);
Sleep(500);
ReleaseSemaphore(tem 1 NULL);
return head;
}
if (i == 1)
{
s = (Pointlist)malloc(sizeof(Point));
s->number = a;
s->prior = NULL;
s->next = p;
p->prior = s;
head = s;
print(head);
Sleep(500);
ReleaseSemaphore(tem 1 NULL);
return head;
}
else
{
for (tempi = 1; tempi < i - 1; tempi++)
{
p = p->next;
}
s = (Pointlist)malloc(sizeof(Point));
s->number = a;
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;
print(head);
Sleep(500);
ReleaseSemaphore(tem 1 NULL);
return head;
};
}
Pointlist Erase(Pointlist head)
{
WaitForSingleobject(uem INFINITE);
int i;
srand((unsigned)time(NULL));
i = (rand() % 10) + 2;
printf(“删除位置%d上的节点\n“ i);
Sleep(500);
int tempi = 1;
Pointlist p; //p为查找结点。
p = head;
while (tempi != i && p != NULL)
{
p = p->next;
tempi++;
}
if (p == NUL
- 上一篇:中文邮件语料库.docx
- 下一篇:fme 2012的licgen.exe
相关资源
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 成绩管理系统(数据结构)
- FIR低通滤波器 ccs运行环境
- C malloc函数用法
- 嵌入式局域网聊天系统客户端
- 算法竞赛入门经典 第2版刘汝佳+高清
- 基于单片机的GPS定位及显示系统设计
- 链表实现通讯录管理系统
- PowerShell-6.2.1-win-x86.zip
- pl/0编译器 语法分析
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
- Skyline高效检索算法实现.zip
- STM8S103系列IO模拟串口通信实现真正串
- stm32f103c8t6移植uC/OS-III基于HAL库的工程
- 温度、一氧化碳、二氧化碳、PM2.5以及
- 王道论坛计算机考研机试指南
- 有限元中网格剖分算法
- PLC开源资料
评论
共有 条评论