没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构编程题目及答案
数据结构编程题目及答案
5星 · 超过95%的资源 需积分: 50 76 下载量 180 浏览量
更新于2023-03-16
8
收藏 273KB DOC 举报
大学数据结构编程题目及答案 如下:1.写出在顺序存储结构下将线性表逆转的算法,要求使用最少的附加空间。 解:输入:长度为n的线性表数组A(1:n) 输出:逆转后的长度为n的线性表数组A(1:n)。 C语言描述如下(其中ET为数据元素的类型)......
资源详情
资源推荐
1.写出在顺序存储结构下将线性表逆转的算法,要求使用最少的附加空间。
解:输入:长度为 n 的线性表数组 A(1:n)
输出:逆转后的长度为 n 的线性表数组 A(1:n)。
C 语言描述如下(其中 ET 为数据元素的类型):
2.已知 L 是无表头结点的单链表,且 P 结点既不是 首元
结点,也不是尾元结点,请写出在 P 结点后插入 S 结点
的核心语句序列。
答:此题答案不唯一,但若从已给定序列中挑选,则限制颇多。
(7) Q=P;
(11) P=L;
(8) while(P->next!=Q)P=P->next;
(10) P=Q;
(4) S->next=P->next;
P->next=S;
3. 编写程序,将若干整数从键盘输入,以单链表形式存储起来,然后计算单链表中结点的个数(其中指
针 P 指向该链表的第一个结点)。 注:统计结点个数是【省统考样题】的要求,也是教材 P60 4-6 计算
链表长度的要求,编程又简单,很容易作为考题。
解:编写 C 程序如下(已上机通过):
全局变量及函数提前说明:
---------------------------------
#include<stdio.h>
#include<stdlib.h>
typedef struct liuyu{int data;struct liuyu*link;}test;
liuyu *p,*q,*r,*head;
int m=sizeof(test);
void main () /*第一步,从键盘输入整数,不断添加到链表*/
{int i;
head=(test*)malloc(m); /*m=sizeof(test);*/
p=head; i=0;
while (i!=-9999)
{ printf("/ninput an integer [stop by '-9999']:");
scanf("%d",&i);
p->data=i; /* input data is saved */
p->link=(test*)malloc(m); /*m=sizeof(test));*/
q=p;
p=p->link;
}
q->link=NULL; /*原先用 p->link=NULL 似乎太晚!*/
1
invsl(n,a)
int n;
ET a[];
{int k;
ET t;
for (k=1; k<=n/2; k++)
{t=a[k-1]; a[k-1]=a[n-k]; a[n-k]=t;}
return;
}
已知 P 结点,则不必“顺藤摸瓜”,直接链
接即可。
(4) S->next=P->next;
(1) P->next=S;
p=head; i=0; /*统计链表结点的个数并打印出来*/
while (p->link!=NULL)
{printf("%d",p->data);
p=p->link;
i++;
}
printf("\n node number=%d\n", i-1); /*结点的个数不包括-9999*/
}
4. 请编写 26 个字母按特定字母值插入或删除的完整程序,可自行选用顺序存储或链表结构。
答:
#include<stdio.h> /*全局变量及函数提前说明:*/
#include<stdlib.h>
typedef struct liuyu{char data;struct liuyu*link;}test;
liuyu *p,*q,*r,*head;
int L; /*元素的个数*/
int m=sizeof(test);
void build(); /* 主函数中会被调用的函数应当预先说明 */
void display();
int insert_char(char,char); /*插入一个字母,在第字母 Y 之前,若无字母则加到末尾*/
int delet_char(char); /* 删除元素 X,注意保存 X 的前趋元素指针! */
/*---------------------------------------------------------*/
void build() /*字母链表的生成*/
{int i;
head=(test*)malloc(m); /*m=sizeof(test);*/
p=head;
for(i=1;i<L;i++)
{ p->data=i+'a'-1; /* 'a'也可用其 ASCII 码 97 来表示 */
p->link=(test*)malloc(m); /*m=sizeof(test));*/
p=p->link; }
p->data=i+'a'-1;
p->link=NULL;
}
/*---------------------------------------------------------*/
void display() /*字母链表的输出*/
{p=head;
while (p->link!=NULL)
{ printf("%c",p->data);
p=p->link; }
printf("%c\n",p->data);
}
/*---------------------------------------------------------*/
int insert_char(char X,char Y) /*插入一个字母 X 在某个字母 Y 之前,若找不到 Y 字母则加到末尾*/
{p=head;
2
r=(test*)malloc(m);
r->data=X;
if(head->data==Y)
{ head=r;
r->link=p; }
else{ while((p->data!=Y)&&(p->link!=NULL)) {q=p; p=p->link;}
if(p->data==Y) { q->link=r; r->link=p; }
else{p->link=r;r->link=NULL;}
}
L++;
return(0);
}
/*---------------------------------------------------------*/
int delet_char(char X) /* 删除元素 X,注意保存 X 的前趋元素指针! */
{ p=head;
if(head->data==X){head=head->link;free(p);}
else{ while((p->data!=X)&&(p->link!=NULL))
{q=p;
p=p->link;}
if(p->data==X)
{ q->link=p->link;
free(p); }
else return(-1);
}
L--;
return(0);
}
/*---------------------------------------------------------*/
void main(void) /*字母线性表的生成和输出*/
{ L=26;
build();
display();
printf("insert return value=%d\n",insert_char('L','W'));
display();
printf("delete return value=%d\n",delet_char('z'));
display();
}
附:屏幕上显示的执行结果是:
a b c d e f g h i j k l m n o p q r s t u v w x y z
insert return value=0
a b c d 9 e f g h i j k l m n o p q r s t u v w x y z L
delete return value=0
a b c d e f g h i j k l m n o p q r s t u v w x y L
1. 假设一个算术表达式中包含圆括弧、方括弧和花括弧三种类型的括弧,编写一个判别表达式中括弧是
3
否正确配对的函数 correct(exp,tag);其中:exp 为字符串类型的变量(可理解为每个字符占用一个数
组元素),表示被判别的表达式,tag 为布尔型变量。
答:用堆栈 st 进行判定,将 ( 、 [ 或 { 入栈,当遇到 } 、 ] 或 ) 时,检查当前栈顶元素是否是对应的( 、
[ 或 {,若是则退栈,否则返回表示不配对。当整个算术表达式检查完毕时,若栈为空表示括号正确配对,
否则不配对。
编程后的整个函数如下(李书 P31—32)
#define m0 100 /*m0 为算术表达式中最多字符个数*/
correct(exp,tag)
char exp[m0];
int tag;
{char st[m0];
int top=0, i=1;
tag=1;
while (i<=m0 && tag)
{if (exp[i]= = ‘(‘||exp[i]= =’[‘||exp[i]= =’{‘) /*遇到‘(‘、’[‘或’{‘,则将其入栈*/
{top++;
st[top]=exp[i];
}
if (exp[i]= =’)’ ) /*遇到’)’ ,若栈顶是‘(‘,则继续处理,否则以不配对返回*/
if(st[top]= =‘(‘ ) top--;
else tag=0;
if (exp[i]= =’ )’ ) /*遇到’ ]’ ,若栈顶是‘[‘,则继续处理,否则以不配对返回*/
if(st[top]= =‘[ ‘] top--;
else tag=0;
if (exp[i]= =’)’ ) /*遇到’ }’ ,若栈顶是‘{‘,则继续处理,否则以不配对返回*/
if(st[top]= =‘{‘ top--;
else tag=0;
i++;
}
if(top>0)tag=0; /*若栈不空,则不配对*/
}
严题集对应答案:
3.19
Status AllBrackets_Test(char *str)//判别表达式中三种括号是否匹配
{
InitStack(s);
for(p=str;*p;p++)
{
if(*p=='('||*p=='['||*p=='{') push(s,*p);
else if(*p==')'||*p==']'||*p=='}')
{
if(StackEmpty(s)) return ERROR;
pop(s,c);
if(*p==')'&&c!='(') return ERROR;
if(*p==']'&&c!='[') return ERROR;
4
剩余18页未读,继续阅读
xwz_new
- 粉丝: 9
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功