双向链表 C (两个无符号数unsinged int) 扩展为6个数组,添加时间显示。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#include "timers.h"

typedef struct ListNode ListNode;
typedef unsigned int uint;
#define DSP_NUMBERS 6
struct ListNode {
uint loop_count;
int number;
char time[25];
ListNode *next;
ListNode *last;
};
ListNode id_test[DSP_NUMBERS];
ListNode *p[DSP_NUMBERS], *q[DSP_NUMBERS], *end[DSP_NUMBERS];
ListNode *start[DSP_NUMBERS] = {NULL, NULL, NULL, NULL, NULL, NULL};

/* Insert function, according to the list in the order of insertion. */
void insert(int num, uint count, uint index)
{
ListNode *q[index];
time_t timep;
struct tm *ptime;
struct timespec timespec;

q[index]=(ListNode*) malloc(sizeof(struct ListNode));
if (start[index] == NULL) /* new */
{
start[index] = q[index];
end[index] = q[index];
p[index] = q[index];
start[index]->last = NULL;
end[index]->next = NULL;
} else {
if ( count <= start[index]->loop_count )/* Insert list head */
{
start[index]->last = q[index];
q[index]->next = start[index];
q[index]->last = NULL;
start[index] = q[index];

} else if ( count > end[index]->loop_count ) /* Insert list tail */
{
end[index]->next = q[index];
q[index]->last = end[index];
end[index] = q[index];
q[index]->next = NULL;
} else if ((count < end[index]->loop_count) && ( count > start[index]->loop_count))/* Inserted in the list */
{
for (p[index] = start[index]; count > p[index]->loop_count; p[index] = p[index]->next)
;
q[index]->next = p[index];
p[index]->last = q[index];
for (p[index] = start[index]; p[index]->next != q[index]->next; p[index] = p[index]->next)
;
p[index]->next = q[index];
q[index]->last = p[index];
}

}

time(&timep);
ptime=gmtime(&timep);
memset(&timespec, 0, sizeof(timespec));
clock_gettime(CLOCK_REALTIME, &timespec);

/*
printf("%04d/%2d/%2d",(1900+ptime->tm_year), (1+ptime->tm_mon),ptime->tm_mday);
printf(" %02d:%02d:%02d.%03ld\n", ptime->tm_hour, ptime->tm_min, ptime->tm_sec,timespec.tv_nsec/1000000);
*/

memset(&q[index]->time,0x00,sizeof(q[index]->time));
sprintf(q[index]->time,"%04d/%2d/%2d %02d:%02d:%02d.%03ld",(1900+ptime->tm_year), (1+ptime->tm_mon),ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec,timespec.tv_nsec/1000000);
/*
printf("time=%s\n",q[index]->time);
*/
q[index]->loop_count = count;
q[index]->number = num;

}

void del(int num, uint index) /* Delete by number */
{
for (p[index] = start[index]; p[index]->number != num; p[index] = p[index]->next)
;
if (p[index]->number == num) {
if (p[index]->next == NULL) {
if (p[index]->last == NULL) {
start[index] = NULL;
} else {
(p[index]->last)->next = NULL;
}
free( p[index] );
} else if (p[index]->last == NULL) {
(p[index]->next)->last = NULL;
start[index] = p[index]->next;
free( p[index] );
} else if (p[index]->last != NULL && p[index]->next != NULL) {
(p[index]->last)->next = p[index]->next;
(p[index]->next)->last = p[index]->last;
free( p[index] );
}
}

else {
printf("Number does not exist!\n");
}

}

void print_list(uint index) {
printf("index\tnum\ttime\t\t\tloop_count\n");
for (p[index] = start[index];; p[index] = p[index]->next) {
printf("%d\t%d\t%s\t\t%d\n",index, p[index]->number, p[index]->time, p[index]->loop_count);
if (p[index]->next == NULL)
break;
}
}

void insert_node_test(void) {
int num;
uint loop_count;

num = 1;
loop_count = 1;
insert(num, loop_count, 0);
print_list(0);
num = 6;
loop_count = 6;
insert(num, loop_count, 0);
print_list(0);
num = 4;
loop_count = 4;
insert(num, loop_count, 0);
print_list(0);
num = 2;
loop_count = 2;
insert(num, loop_count, 0);
print_list(0);

num = 5;
loop_count = 5;
if ( (num > 4) && (loop_count > start[0]->loop_count) ) {
del(1, 0);
print_list(0);
} else {

}
insert(num, loop_count, 0);
print_list(0);
}

运行结果如下:

index   num   time               loop_count
0      1      2015/ 1/15 08:15:40.033      1
index   num   time               loop_count
0      1      2015/ 1/15 08:15:40.033      1
0      6      2015/ 1/15 08:15:40.033      6
index   num   time               loop_count
0      1      2015/ 1/15 08:15:40.033      1
0      4      2015/ 1/15 08:15:40.033      4
0      6      2015/ 1/15 08:15:40.033      6
index   num   time               loop_count
0      1      2015/ 1/15 08:15:40.033      1
0      2      2015/ 1/15 08:15:40.033      2
0      4      2015/ 1/15 08:15:40.033      4
0      6      2015/ 1/15 08:15:40.033      6
index   num   time               loop_count
0      2      2015/ 1/15 08:15:40.033      2
0      4      2015/ 1/15 08:15:40.033      4
0      6      2015/ 1/15 08:15:40.033      6
index   num   time               loop_count
0      2      2015/ 1/15 08:15:40.033      2
0      4      2015/ 1/15 08:15:40.033      4
0      5      2015/ 1/15 08:15:40.033      5
0      6      2015/ 1/15 08:15:40.033      6
->

时间: 2024-11-06 03:28:47

双向链表 C (两个无符号数unsinged int) 扩展为6个数组,添加时间显示。的相关文章

双向链表 C (两个无符号数unsinged int)

#include <stdio.h>#include <string.h>#include<stdlib.h> typedef struct ListNode ListNode;typedef unsigned int uint;struct ListNode { uint loop_count; int number; ListNode *next; ListNode *last;};ListNode *p, *q, *start = NULL, *end;/* In

两个无符号数相减 可以得到负数

#include <iostream> using namespace std; unsigned int i1=3; unsigned int i2=6; int i3=i1-i2; cout<<i3<<endl; //-3 两个无符号数相减 可以得到负数

深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言中的有符号数和无符号数 上一篇博客我们给出了C语言中在32位机器和64位机器中支持的整型类型数据,我们这里只给出32位机器上的: 尽管 C 语言标准没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码.通常大多数数字是默认有符号的,比如当声明一个像12345或者0xABC这样的常量的时候

c的基础 1. 无符号数和补码

计算机中储存和处理的信息是以二进制信号表示的.单个的位不是是很实用,而将这些位 组合在一起,加上某种解释,即给不同的可能位模式赋予含义,我们就行表示怎样有限集合的元素,即实现各种数据结构.计算机中使用8位的块称之为字节作为最小的可寻址的存储器单位,机器级程序将存储器视为一个很大的字节数组,称为虚拟存储器.存储器的每一个字节都有一个唯一的数字来标识,称为地址,全部可能地址的集合称为虚拟地址空间. c语言中的指针,指针的值为某个存储块的第一个字节的虚拟地址.C编译器将每一个指针和类型信息结合起来,依

理解有符号数和无符号数

负数在计算机中如何表示呢? 一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切.再者,用"补码"表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算.却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数.这种说法本身没错,可是如果没有下文,那么它

C++有符号和无符号数的转换

本文转自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题,被它们之间的转换原理和位移原理搞得头大了.真的很后悔本科的时候没有认真学习<计算机组成原理>/<计算机操作系统>等计算机基础课程.以下是我根据相关知识回顾和整理的材料,如有和某某的文章有雷同之处,请勿见怪.另外也希望看到这篇文章的同志们能够有所收获吧. 1 #include <

关于有符号数和无符号数的转换 - C/C++

转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题,被它们之间的转换原理和位移原理搞得头大了.真的很后悔本科的时候没有认真学习<计算机组成原理>/<计算机操作系统>等计算机基础课程.以下是我根据相关知识回顾和整理的材料,如有和某某的文章有雷同之处,请勿见怪.另外也希望看到这篇文章的同志们能够有所收获吧. #include <cst

关于有符号数和无符号数的转换

1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题,被它们之间的转换原理和位移原理搞得头大了.真的很后悔本科的时候没有认真学习<计算机组成原理>/<计算机操作系统>等计算机基础课程.以下是我根据相关知识回顾和整理的材料,如有和某某的文章有雷同之处,请勿见怪.另外也希望看到这篇文章的同志们能够有所收获吧. #include <cstdio> #include <iostream> using namespace std; int ma

C语言中 有符号数、无符号数、整数溢出 (转)

[cpp] view plain copy print? #include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } 这个的结果134,而不是我之前认为的很大的正数,实际上需要注意的是-1(0xffffffff)被提升为unsigned int后是一个差1就溢出的unsigned int,所以相加后结果是134.但是如果l=-10000,那么结果就真是一个很大的正数了