双向链表 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;
/* Insert function, according to the list in the order of insertion. */
void insert(int num, uint count)
{
ListNode *q;
q=(ListNode*) malloc(sizeof(struct ListNode));
if (start == NULL) /* new */
{
start = q;
end = q;
p = q;
start->last = NULL;
end->next = NULL;
} else {
if ( count <= start->loop_count )/* Insert list head */
{
start->last = q;
q->next = start;
q->last = NULL;
start = q;

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

}
q->loop_count = count;
q->number = num;

}
void find(int num) /* Find by Serial Number */
{
if (start == NULL) {
printf("NULL\n");
} else {
for (p = start; p != NULL && p->number != num; p = p->next)
;
if (p == NULL) {
printf("erro num\n");

} else if (p->number == num) {
printf("num=%d\n", num);
printf("loop_count=%d", p->loop_count);
}

}
}
void del(int num) /* Delete by number */
{
for (p = start; p->number != num; p = p->next)
;
if (p->number == num) {
if (p->next == NULL) {
if (p->last == NULL) {
start = NULL;

} else {
(p->last)->next = NULL;
}
free( p );
} else if (p->last == NULL) {
(p->next)->last = NULL;
start = p->next;
free( p );
} else if (p->last != NULL && p->next != NULL) {
(p->last)->next = p->next;
(p->next)->last = p->last;
free( p );
}
}

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

}
void print_list() {
printf("num\tloop_count\n");
for (p = start;; p = p->next) {
printf("%d\t%d\n", p->number, p->loop_count);
if (p->next == NULL)
break;
}
}
void insert_node_test(void) {
int num;
uint loop_count;

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

#if 0
del(num);
print_list();
find(num);
#endif
/* print_list(); */
}

运行结果如下:

num loop_count
1 1
num loop_count
1 1
6 6
num loop_count
1 1
4 4
6 6
num loop_count
1 1
2 2
4 4
6 6

时间: 2024-10-20 06:16:34

双向链表 C (两个无符号数unsinged int)的相关文章

双向链表 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 6struct ListNode { uint

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

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

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

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

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

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

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,那么结果就真是一个很大的正数了