编写函数struct oct*num2list(unsigned charlong num)。其功能是将十

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
程序员面试题(编程题)
下载积分:30
内容提示:介绍c++程序员的面试题和编程题
文档格式:PDF|
浏览次数:363|
上传日期: 05:04:11|
文档星级:
该用户还上传了这些文档
程序员面试题(编程题)
官方公共微信C语言中编写两个函数我是新手,最近学到单向链表了,有一个疑惑.比如,假设编写函数creat是建立一个带有头结点的链表,编写函数take是顺序输出单向链表各结点数据的内容.函数creatstruct list{struct list *};SLIST *creat(){ int c; SLIST *h,*s,*r; h=(SLIST *)malloc(sizeof(SLIST));    /*生成头结点*/ r=h;                 /*r指向当前表尾*/ scanf(“%d”,&c)          /*读入数据*/ while(c!=1)              /*未读到数据结束标志时进入循环*/ { s=(SLIST *)malloc(sizeof(SLIST));  /*生成一个新结点*/  s->data=c            /*读入的数据存入新结点的data域*/  r->next=s:           /*新结点连到表尾*/  r=s:               /*r指向当前表尾*/  scanf(“%d”,&c);        /*读入数据*/ } r->next=‘\0’;          /*置链表结束标志*/ return h;             /*返回表头指针*/:}函数take:void take(SLIST *head){ SLIST *p; . p=head->next;            /*p指向头结点后的第一个结点*/ if(p==‘\O’)  printf(“Linklist is null!\n”);    /*链表为空(只有头结点)*/ else                  /*链表非空*/  {printf(“head”);   do    {printf(“->%d”,p->data);  /*输出当前结点数据域中的值*/     p=p->next;         /*p指向下一个结点*/    }  while(p!=‘\O’);           /*未到链表尾,继续循环*/   printf(“->end\n”);  }我想问的就是能不能在一个程序里面编写上面两个函数,然后在主函数里面实现先建立再输出呢.或者不需要编写函数?上面的SLIST代表 struct list.如果可以怎么编写,直接在把上面两个函数写上,最后补上如下程序void main(){struct list *pig=creat();take(pig);}运行了就崩溃,哪里错了呢.讲会了加50分.关于形参实参,传值传址我懂的
当然可以的
请问怎么编写呢
最简单的使用一个 .c 主文件就可以了
比如像这样的形式:
// 定义结构体
struct list
//定义函数
struct list* Create(...) { ... }
void take(...) { .. .}
struct list *p = Create();
这样就可以了啊。
--------------------------
我刚准备说这个问题的,因为你使用了malloc
函数,你的链表是动态创建的。所以程序结束之前要释放。你还要写一个
像这样的形式:void delete(struct list * p);
你自己实现怎么在里面调用free释放你创建的链表,我就不写了。
------------------------------
还有,之前没有看你的函数具体实现,create 和 take这两个函数都有问题。
------------------------------------
哎,看不下去了,本来不想写的,但是另外一位同学虽然说了很多 但是代码也是个错的。
这不是误导青少年么?
少年,你等一下,我给你写一个新的,我将在程序里指出你们的错误。
--------------------------------
少年,已经给你写好了,但是字数限制不让继续粘贴了,你在这接一个追问,我再发。
上面ququqiqi同学的我已经运行出来了。你发个对比看看把
struct List
{ // 注意我这里使用的是int型,当然char也可以,但是用int演示方便一点
struct List* pN
struct List* Create()
// 定义临时数据变量,保存输入的数字
// 分别定义头节点,上一个节点,下一个节点指针
struct List* head, *prev, *
head = NULL; // 初始化为空
scanf("%d", &temp); // 先输入一个数字
while (temp) // 判断输入的数字是否为0
if (NULL == head)
// 若头节点是空,则创建头节点
head = (struct List*)malloc(sizeof(struct List));
head->data = // 在你的程序中,没有给头节点中的data赋值
head->pNext = NULL;
else // 否则创建下一个节点
next = (struct List*)malloc(sizeof(struct List));
next->data =
next->pNext = NULL;
prev->pNext = // 上一个节点的下一个节点等于新创建的节点
prev = // 到下次循环的时候,新创建的节点已经成为上一个节点
scanf("%d", &temp);
void PrintList(struct List* head)
// 在你的take函数中,第一句p=head->next;有问题。
// 因为如果传进来的head本身为空的话,那么head->next将不存在,会引发异常。
// 你应该首先就拿head判断是否为空
// 并且你使用p==‘\O’这样的语句判断指针是否为空,本身没有错误,而且也是对的。
// 因为'\0'的值等于0, NULL的值也等于0,所以你这样写p=='\0',p==0,p==NULL都没有错。
// 但是为了直观,建议这样写:NULL == p
// 至于你的printf逻辑,说实话没看懂,写的也不对。
printf("----------------\n");
while (head)
printf("%d ", head->data);
head = head->pN
printf("\n");
// 最后就是这个free关键的函数不能遗漏,不释放的话将在程序结束的时候崩溃。
void FreeList(struct List* head);
为您推荐:
其他类似问题
扫描下载二维码C语言程序设计教程第二版答案 高教版 谭浩强 张基温_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言程序设计教程第二版答案 高教版 谭浩强 张基温
上传于||文档简介
&&C​语​言​程​序​设​计​教​程​第​二​版​ ​
​
​高​等​教​育​出​版​社​
​
​
​
​谭​浩​强​ ​张​基​温​ ​唐​永​炎​ ​等
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩101页未读,继续阅读
你可能喜欢C++ 建立一个职员的工作链表,编写函数del,能删除节点,并且增加功能:按工号num1修改员工的工资wage。_百度知道
C++ 建立一个职员的工作链表,编写函数del,能删除节点,并且增加功能:按工号num1修改员工的工资wage。
while(p;&lt, name and wage&&
q-&&&&& }}求改错;wage=num1; &请输入修改后的工资值;&lt,num1; } return(head);&&lt!=p-& cout&&&wage& } tail-&
p=p-& cout&num&&p-&}
staff *p=head,*iostream&newnode-&& else {
p=& cin&p-& for(int i=0。;
cout&&&num&& if(head==NULL) cout&}void main(){ 请输入需要修改工资的员工工号;n;next=p-& & double change,num);&&&p-& && staff *q=next=
newnode=请输入初始的节点数&quot!=NULL)
q=p;&lt。;&&quot!&& head=del(name&
if(num==p-&
else q=q-&&
if(head==NULL)
cin&next=NULL;&newnode-&gt,long num){ struct staff *p; cin&struct staff{ long num:& while(q!=NULL) {
tail= cout&lt:&&lt,*tail=NULL;
while(num!&quot!=NULL) {
cout&i& cin&n; char name[20]; cin&&& p-&&num&&newnode-& struct staff *&
tail-&&lt:&&&};&&struct staff *del(staff *name&&num)
if(p==head)
head=p-&gt,*q;&&&&
staff *head=NULL;&num==num1)
cout&请输入所要删除的员工工号;&lt#include &lt
提问者采纳
break:if(q-&num==num1) q-&改为if(head==NULL){head=wage=change:if(head==NULL) head=num==num1) {q-&gt创建链表时;改为if(q-&wage=}修改工资处;tail=head
提问者评价
谢谢高手! 原来是少了个break
其他类似问题
为您推荐:
链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁结构体数组初始化 struct student { long num[5]; char name[10]; int s[4]; }stu[30];_百度知道
结构体数组初始化 struct student { long num[5]; char name[10]; int s[4]; }stu[30];
要求从键盘输入赋值,num是学号 name是姓名 s[4]是4门功课的成绩!
姓名; double ave}stu[30],再求出平均分; char name[10]struct student { long num[5]; int s[4],用2个函数调用实现,1个函数实现输出30名学生的信息,1个函数实现以上功能、4门功课的成绩;从键盘输入30名学生的学号
我有更好的答案
;%d %d %d %d&.num.name);%d %d&quot.s[1],&student.s[0]Sscanf(&scanf(&quot,&student,&student,&student,&student.s[2].s[3]),&student
你是输入一个student的值?还是创建一个程序,一直输入student,然后链表保存?
#include &stdio.h&#define N 5struct student{long num[5];char name[10];int s[4];};int main(){student stu[N];for(i=0;i&N;i++){scanf(&%ld %s&,&stu[i].num,&stu[i].name);scanf(&%d %d %d %d&,&stu[i].s[0],&stu[i].s[1],&stu[i].s[2],&stu[i].s[3]);}for(i=0;i&N;i++){printf(&%ld %s&,stu[i].num,&stu[i].name);printf(&%d %d %d %d&,stu[i].s[0],stu[i].s[1],stu[i].s[2],stu[i].s[3]);printf(&\n&);}return 0;}没看到你已经定义了数组了,那好吧,不用链表了,直接输入了,你要上输入30个,把那个N的那个值改成30就0k了如果想要链表格式欢迎追问,我在弄一个链表的
怎么运行不了呢
你什么编辑器啊,我vc6.0很正常啊
Linking...LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals执行 link.exe 时出错.
学号为什么要是数组呢?一个人有5个学号么?
题目是这样的
来自:求助得到的回答
其他类似问题
为您推荐:
结构体数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 unsigned char 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信