xx嘻嘻

yaya_lucky 2012-11-23 05:32:53
#include <stdio.h>
#include <stdlib.h>


int Enqueue(char priority[4], int data);
int Dequeue(int* data);
void print();


void main(void)
{
char priority[4];
int data;
int sum = 0;
int l = 0;
int c = 0;

for ( l = 0; l < 10; l++)
{
for ( c = 0; c < 10000; c++)
{
if ((rand() % 3) <= 1)
{
data = rand() % 100;

priority[0] = 'A' + (rand() % 4);
priority[1] = 'A' + (rand() % 4);
priority[2] = 'A' + (rand() % 4);
priority[3] = 'A' + (rand() % 4);

printf("enq%d\t%c%c%c%c\n", data, priority[0], priority[1], priority[2], priority[3]);
Enqueue(priority, data);
}
}

//printf("sum: %d\n", sum);
}
print();
}




#include <stdio.h>
#include <stdlib.h>



typedef struct queue{
char priority[4];
int data;
struct queue *next;
struct queue *prev;
}myqueue;

static myqueue head = {0, 0, NULL, NULL};

int ComparePriority(char *pchar, char *pchar2, int n)
{
int i = 0;

for(i = 0; i < n; i++)
{
if((pchar[i] - pchar2[i]) == 0)
continue;

if((pchar[i] - pchar[i]) < 0)
return 1;
else
return -1;
}

return 0;
}

int Enqueue(char priority[4], int data)
{
myqueue *queue = (myqueue *)malloc(sizeof(myqueue));
int i = 0;
int result = 0;
myqueue *pTemp = NULL;
myqueue *phead = NULL;

if(queue == NULL)
return -1;
//memset(queue, 0x00, sizeof(myqueue));
queue->data = data;
for(i = 0; i < 4; i++)
queue->priority[i] = priority[i];
queue->next = NULL;
queue->prev = NULL;

if((&head)->next == NULL)
{
(&head)->next = queue;
queue->prev = (&head);

return 1;
}
// printf("insert start\n");
phead = (&head)->next;
while(phead != NULL)
{
pTemp = phead;
result = ComparePriority(pTemp->priority, queue->priority, 4);

if(result == 0) //same priority
{
if((queue->data > pTemp->data) || (queue->data == pTemp->data)) //insert after
{

if(pTemp->next == NULL) //pTemp is the last
{
pTemp->next = queue;
queue->prev = pTemp;
break;
}
else if(ComparePriority(pTemp->next->priority, queue->priority, 4) == 0)
{
phead = pTemp->next;
continue;
}
else
{
pTemp->next->prev = queue;
queue->prev = pTemp;
queue->next = pTemp->next;
pTemp->next = queue;
break;
}
}
else
{
queue->next = pTemp;
queue->prev = pTemp->prev;
pTemp->prev->next = queue;
pTemp->prev = queue;
}

break;
}
else if(result == 1) //new higher insert before
{
queue->next = pTemp;
queue->prev = pTemp->prev;
pTemp->prev->next = queue;
pTemp->prev = queue;

break;
}
else // new lower
{
if(pTemp->next != NULL)
{
phead = pTemp->next;
continue;
}
else // can't find lower than queue, insert the last
{
pTemp->next = queue;
queue->prev = pTemp;
break;
}
}

}

// printf("insert end\n");

return 1;
}

void print()
{
myqueue *phead = NULL;
myqueue *pTemp = NULL;
phead = (&head)->next;

while(phead != NULL)
{
pTemp = phead;
printf("%d\t%c%c%c%c\n", pTemp->data, pTemp->priority[0], pTemp->priority[1], pTemp->priority[2], pTemp->priority[3]);
phead = pTemp->next;
}
}

int Dequeue(int* data)
{
myqueue *queue = NULL;

if((&head)->next == NULL)
return -1;

queue = (&head)->next;
(&head)->next = queue->next;
queue->next->prev = &head;
*data = queue->data;
free(queue);
queue = NULL;

return 1;
}

...全文
168 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shirui8653719 2012-11-25
  • 打赏
  • 举报
回复
漫步者、 2012-11-24
  • 打赏
  • 举报
回复
求欣赏,求xx,求嘻嘻
bookc-man 2012-11-24
  • 打赏
  • 举报
回复
newtee 2012-11-24
  • 打赏
  • 举报
回复
cao_julians 2012-11-24
  • 打赏
  • 举报
回复
int Enqueue(char priority[4], int data); 这个声明中的常量4就是一个没有任何意义的成分,你把它改成其它整数或者省略它,看看编译器有什么反应?
appleyk 2012-11-24
  • 打赏
  • 举报
回复
嘻嘻, 好可爱的头像啊~!
wanglu343280746 2012-11-24
  • 打赏
  • 举报
回复
贴了一段代码,然后笑了笑。神马意思
搬砖随想录 2012-11-23
  • 打赏
  • 举报
回复
easyrem 2012-11-23
  • 打赏
  • 举报
回复
我还以为是炫耀、搞笑的帖子呢
L_chxu 2012-11-23
  • 打赏
  • 举报
回复
转角天边 2012-11-23
  • 打赏
  • 举报
回复
上来就一大段代码,你是要干吗

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧