数据结构c语言版题库含解析(c语言数据结构题,求大神解答)

本文目录
c语言数据结构题,求大神解答
#include 《stdio.h》
#include 《malloc.h》
#define N 7
typedef struct node{
int item;
struct node*l;
struct node*r;
}*link;
link *h;
int Nq=N;
link NODE(intitem,linkl,linkr)
{
linkt=malloc(sizeof*t);
t-》l=l;
t-》r=r;
t-》item=item;
return t;
}
void shif_up(inti)
{
int j;
while(i》1)
{
j=i/2;
if()
}
}
void insert(linkt)
{
h=t;
shif_up(Nq);
}
link delmin()
{
swap(1,Nq--);
shif_down(1,Nq);
return h;
}
link creat_heap(intfreq,intlen)
{
int i;
for(i=0;i《len;i++)
h,NULL,NULL);
for(i=N/2;i》=0;i--)
shif_down(i,N);}
void huffman(intfreq,intlen)
{
h=malloc(len*sizeof(link));
creat_heap(h,freq,len);
while(Nq》1)
{
linkt1=delmin();
linkt2=delmin();
insert(NODE(t1-》item+t2-》item,t1,t2));
}
}
int main(void)
{
int freq={5,2,9,11,8,3,7};
huffman(freq,N);
return 0;
}
权值,在通过结果算一下就可以了。O(∩_∩)O谢谢
跪求数据结构(c语言版)的几个问题解答
实验一
单链表有一个头节点h
e
a
d,指向链表在内存的首地址。链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(事实上,此单链表是用于存放整型数据的动态数组)。链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。无论在表中访问那一个节点,都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为N
U
L
L。
删除运算是将表的第i个结点删去。
具体步骤:
(1)找到要删除结点ai的存储位置p(因为在单链表中结点ai的存储地址是在其直接前趋结点ai-1的指针域next中)
(2)令p->next指向ai的直接后继结点(即把ai从链上摘下)
(3)释放结点ai的空间,将其归还给"存储池"。
插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。
具体步骤:
(1)找到ai-1存储位置p
(2)生成一个数据域为x的新结点*s
(3)令结点*p的指针域指向新结点
(4)新结点的指针域指向结点ai。
#include《stdio.h》
typedef
int
numtype;
typedef
float
scoretype;
typedef
struct
node
{numtype
num;
scoretype
score;
struct
node
*next;
}linklist;
int
n;
//创建单链表
linklist
*creat()
{
linklist
*head,*p1,*p2;
n=0;
p1=p2=(linklist*)malloc(sizeof(linklist));
printf("请输入第1个学号:\n");
//单链表内容,学号和成绩
scanf("%d",&p1-》num);
printf("请输入第1个成绩:\n");
scanf("%f",&p1-》score);
head=NULL;
while(1)
{n=n+1;
if(n==1)
head=p1;
else
p2-》next=p1;
p2=p1;
p1=(linklist*)malloc(sizeof(linklist));
printf("请输入第%d个学号:\n",n+1);
scanf("%d",&p1-》num);
if(p1-》num
==
0)
//这里是终止输入的符号,也就是学号输入0,那么就停止输入。你也可以设置为其它的符号
break;
printf("请输入第%d个成绩:\n",n+1);
scanf("%f",&p1-》score);
}
p2-》next=NULL;
return
head;
}
//单链表的插入
linklist
*insert(linklist
*head,linklist
*stud)
{
linklist
*p1,*p2,*p0;
p1=head;
p0=stud;
if(head==NULL)
{
head=p0;p0-》next=NULL;}
else
{
while((p0-》score》=p1-》score)&&(p1-》next!=NULL))
{
p2=p1;p1=p1-》next;
}
if(p0-》score《p1-》score)
{
if(head==p1)
head
=p0;
else
p2-》next=p0;
p0-》next=p1;}
else
{
p1-》next=p0;
p0-》next=NULL;
}
}
return
head;
}
//单链表的删除
linklist
*del(linklist
*head,float
dscore)
{
linklist
*p1,*p2;
if(head==NULL)
{printf("\n
list
is
NULL!");
return
(head);
}
else
{
p1=head;
while((dscore!=p1-》score)&&(p1-》next!=NULL))
{
p2=p1;
p1=p1-》next;
}
if(dscore
==
p1-》score)
{
if(p1==head)
head=head-》next;
else
p2-》next=p1-》next;
free(p1);
printf("已删除:%.2f\n",dscore);
}
else
printf("%.2f
没有在链表中找到!\n",dscore);
}
return
head;
}
//输出单链表
void
display(linklist
*r)
{linklist
*t;
t=(linklist*)malloc(sizeof(linklist));
t=r;
printf("\n
单链表显示
:\n学号\t成绩\n");
if(t==NULL)
printf("链表为空。");
else
while(t!=NULL)
{
printf("%d\t",t-》num);
printf("%.2f\n
",t-》score);
t=t-》next;
}
printf("\n");
}
//单链表的插入与删除
int
main()
{
float
s;
linklist
*q,*p;
p=(linklist*)malloc(sizeof(linklist));
q=creat();
display(q);
printf("请输入要删除的结点对应的成绩:");
scanf("%f",&s);
q=del(q,s);
display(q);
printf("请输入要插入的学号和成绩:\n");
printf("学号:");
scanf("%d",&p-》num);
printf("成绩:");
scanf("%f",&p-》score);
q=insert(q,p);
display(q);
return
0;
}
一道c语言数据结构题,求解答!
1、任何中缀表达式都由运算数,运算符,括号(大,中,小),这三部分组成。
2、从中缀表达式的左边开始扫描(脑中自己想像的),若遇到运算数时,则直接将其输出(不压入堆栈)。
3、若遇到左括号,则将其压栈。
4、若遇到右括号,表达括号内的中缀表达式已经扫描完毕。这时需将栈顶的运算符依次弹出并输出,直至遇到左括号。
5、若遇到的是运算符:( ( * 》 / ) 》 ( + 》 - ) )
a、如果该运算符的优先级大于栈顶运算符的优先级时,将其压栈
b、如果该运算符的优先级小于栈顶运算符的优先级时,将栈顶运算符弹出并输出,接着和新的栈顶运算 符比较,若大于,则将其压栈,若小于,继续将栈顶运算符弹出并输出......(一直递归下去,直至运算符大于栈顶云算符为止)。
6、最后一步,若扫描到中缀表达式的末尾,若堆栈中还有存留的运算符依次弹出并输出即可。
一份C语言的数据结构题目,急求答案
第一题;Search (BiTree t,ElemType x)
{ struct nodee;
{BiTree pp;
int tag;
}s;
int top; Bitree p;
top=0; p=t;
while(p!=NULL&&p-》p!=NULL)
{while(p!=NULL&&p-》data!=x)
{top++;
s.pp=p;
s.tag=0;
p=p-》lchild;
}
if(p!=NULL&&p-》data==x)
{for(i=1; i《=top; i++)
printf(s.pp-》data);}
else
if(top》0&&s.tag==1)
{top--;p=NULL;}
else
if(top》0)
{s.pp;p=p-》rchild;
}
}
}

更多文章:
entertainment系列(全球一线游戏制作公司有哪些)
2025年9月21日 01:00
下拉框选择怎么设置多个内容(Excel数据有效性设置的下拉菜单内容有多个,但选择时只能单选,如何设置下拉菜单,可以在选择时多选)
2025年7月29日 03:15
find命令排除目录(如何用find命令只查找到文件,但不包括目录)
2026年2月25日 16:15
坐卧铺换票卡是什么意思(火车上,卧铺的车票为什么要换牌有什么作用)
2025年10月31日 08:45
microchip英文介绍(帮忙翻译,要求使用被动语态,谢谢啊)
2026年9月3日 12:00
网页游戏小小忍者游戏单机版,有源代码的详细说下怎么弄(本人菜鸟)?求网页游戏《倾城》服务端和客户端源码
2026年7月11日 08:45
java颜色代码表(Cult3D 高级教程之改变材质颜色的java代码)
2025年7月27日 00:00
C#如何将UTF8的编码转回汉字?各位大神这个编码怎么转换成汉字,必须
2025年7月30日 12:30
502 bad gateway nginx是什么意思(电脑出现502bad gateway怎么解决)
2026年3月7日 02:30
gridview更新编辑(C#后台动态生成的gridview怎么加入 编辑 更新 取消)
2026年5月30日 05:15










