所在位置:主页 > 程序语言 > 单片机C语言如何查表(将静态的表写在程序存储器中)?

单片机C语言如何查表(将静态的表写在程序存储器中)?

发布时间:2024-01-10 13:37来源:www.sf1369.com作者:宇宇

单片机C语言如何查表(将静态的表写在程序存储器中)?

c语言中用CODE修饰就是把大数组存于程序存储中,运行中不能修改,相当于常量

c语言 线性表(急)

完整的程序,用链表:

//---------------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>

typedef struct node{

int id;

double score;

struct node *next;

} node,list;

void init(list **a,list **b) /*创建两个原链表*/

{

double score[]={70,85,75,90,60,80,76,50};

list *now,*ne;

int i=0;

*b=*a=NULL;

for (i = 0; i<8; i++) {

ne=(list *)malloc(sizeof(node));

ne->id=i+1;

ne->score=score[i];

ne->next=NULL;

if (i<4) {

if (!*a) *a=now=ne;

else{

now->next=ne;

now=ne;

}

}

else{

if (!*b) *b=now=ne;

else{

now->next=ne;

now=ne;

}

}

}

}

void sort(list *a)

/*链表按成绩升序排序*/

{

list *t,*k;

int tid;

double tsc;

while (a->next)

{

k=a;

for (t=a->next; t; t=t->next) {

if (t->score<k->score) {

k=t;

}

}

if (k!=a) {

tid=a->id;

a->id=k->id;

k->id=tid;

tsc=a->score;

a->score=k->score;

k->score=tsc;

}

a=a->next;

}

}

list *merge(list *a,list *b) /*合并两个链表a和b,并返回合并后的新链表*/

{

list *rt=NULL,*n=NULL,*now=NULL;

while (a&&b)

{

n=(list *)malloc(sizeof(node));

n->next=NULL;

if (a->score<=b->score) {

n->id=a->id;

n->score=a->score;

a=a->next;

}

else {

n->id=b->id;

n->score=b->score;

b=b->next ;

}

if (!rt) {

rt=now=n;

}

else{

now->next=n;

now=n;

}

}

while (a)

{

n=(list *)malloc(sizeof(node));

n->next=NULL;

n->id=a->id;

n->score=a->score;

now->next=n;

now=n;

a=a->next

;

}

while (b)

{

n=(list *)malloc(sizeof(node));

n->next=NULL;

n->id=b->id;

n->score=b->score;

now->next=n;

now=n;

b=b->next;

}

return rt;

}

void view(list *a)

/*输出链表的内容*/

{

if (a) {

printf(%d:%g\

,a->id,a->score); /*按 学号:成绩 的格式输出*/

view(a->next);

}

}

void Free(list *a)

/*释放空间,删除链表*/

{

if (a->next) Free(a->next);

free(a);

}

int main(void)

/*测试*/

{

list *a,*b,*c;

init(&a,&b);

sort(a);

sort(b);

c=merge(a,b);

view(c);

/*输出合并后的链表*/

Free(a);

Free(b);

Free(c);

return 0;

}

//---------------------------------------------------------------------------