西电《软件技术基础》上机大作业答案

合集下载

西电机电院软件技术基础大作业

西电机电院软件技术基础大作业

上机报告班级:04103201:伟学号:04103123一、上机目的:明确线性表和树的相关用法,写出相应的程序,实现相应所需的功能。

二、上机容1.设有一个由正整数组成的无序单链表,编写完成下列功能的算法:①找出最小值结点,且打印该数值;②若该数值是奇数,则将其与直接后继结点的数值交换;③若该数值是偶数,则将其直接后继结点删除。

2.编一程序:①建立一个数据域为1至10的带头结点的链表;②将此链表就地逆转。

3.设有一个含有数字、英文字母和其它字符的单链表,试编写一个算法将该单链表拆分为三个单链表,使每个单链表中只包含同一类的字符,要求利用原表中的结点空间作为这三个表的结点空间,头结点可以另辟空间。

4.某百货公司仓库中有一批电视机,试按价格从高到低的次序建立一个循环链表,每个结点有价格、数量和指针三个域。

现新到10台价格为4000元的电视机,修改原链表并输出修改后链表的所有容。

5.假设称正读反读都相同的字符序列为回文。

例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’’为结束符的字符序列是否是回文。

6.试设计一个程序,求二叉树的结点数目和叶子结点数目。

三、设计说明1.用一个单链表实现,单链表中的每一个节点储存一个整数,从前到后遍历一遍链表找出最小值,若该值是奇数,则将最小值节点与其后节点交换,若该值是偶数,则将其后节点删除。

2.建立一个单链表,从头结点开始,数据域依次是1到10。

再按照头插法的思想,从第二个节点还是,依次把其后的节点,插到头节点的后面。

即可将链表逆转。

3.建立三个单链表。

其中一个链表用来存输入的数据,其余三个链表置空,从前到后遍历一遍原始链表,若数据域是数字,则继续遍历该链表。

若数据域是英文字母或是其它字符,则将其从原来的链表中删除,并把它分别插入到其它两个链表中。

4.建立一个循环链表,链表的数据域为商品的价格和数量,最后插入(4000,10)节点。

电子科技大学15秋《软件技术基础》在线作业3满分答案

电子科技大学15秋《软件技术基础》在线作业3满分答案

15秋《软件技术基础》在线作业3
一,单选题
1. 存储管理的目的是()。

A. 方便用户
B. 提高内存利用率
C. 方便用户和提高内存利用率
D. 增加内存实际容量
正确答案:D
2. 可以采取下列哪些预防措施防止死锁的产生()。

A. 采用资源静态分配策略,破坏"部分分配"条件
B. 允许进程剥夺使用其他进程占有的资源,从而破坏"不可剥夺"条件
C. 采用资源有序分配法,破坏"环路"条件
D. 采用虚拟设备共享法
正确答案:D
3. 可作为页面大小的只有()。

A. 100B
B. 200B
C. 300B
D. 512B
正确答案:D
4. 队列中输入A,B,C,D,E,F六个字符,出队列顺序是()。

A. ABCDEF
B. FEDCBA
C. AFECB
D. FABCDE
正确答案:A
5. ()不是操作系统关心的主要问题。

A. 管理计算机裸机
B. 设计、提供用户程序与计算机硬件系统的界面
C. 管理计算机系统资源
D. 高级程序设计语言的编译器
正确答案:D
二,多选题
1. 图的遍历有()。

A. 广度优先搜索遍历
B. 深度优先搜索遍历。

西电—软件大作业

西电—软件大作业

软件技术基础大作业电子工程学院2016.121、//单链表逆置void invert(linklist*head) {linklist*p, *q, *r;//p指向前一个结点,q指向p后的结点,r用于保存q指针域的值p = head->next; //p指向第一个结点q = head->next->next; //q指向第二个结点head->next->next = NULL;while (q != NULL) {r = q->next;//保存q指针域的值,接下来会将此值赋予pq->next = p; //修改q的指针域,使其指向p所指结点,以达到逆置的目的p = q;//p 后移q = r;//q后移}head->next = p;}分析:2、//按字母、数字、其它字符分解单链表void resolve(linklist*head, linklist*letter, linklist*digit, linklist*other) { linklist *p;while (head->next != NULL) {p = head->next; //p指向第一个节点head->next = head->next->next; //缩短循环链表if ((p->data >= 'A'&&p->data <= 'Z') || (p->data >= 'a'&&p->data <= 'z')) insert(letter, p);elseif (p->data >= '0'&&p->data <= '9')insert(digit, p);else insert(other, p); //判断字母、数字和其它字符}}分析:3、//判字符串是否中心对称int symmetry(linklist*head, stack*s) {int l = length(head);int n = l / 2;int x;linklist*p = head->next;for (int i = 1; i <= n; i++) {push(s, p->data);//把单链表的前一半元素压入堆栈p = p->next;}if (l % 2 == 1) p = p->next;//当链表长度为奇数时while (p->next != NULL) {x = pop(s);if (x == p->data)p = p->next;elsereturn 0;}return 1;}分析:4、//入队void enqueue(qu *sq, datatype x) {for (int i = 0; i < m; i++) {sq->sequ[i] = x;}}//出队datatype *dequeue(qu *sq){datatype *temp;if (sq->quelen == 0){printf("queue is empty\n"); return NULL;}else {temp = (datatype*)malloc(sizeof(datatype));sq->quelen--;*temp = sq->sequ[(sq->rear - sq->quelen + m) % m];return (temp);}}分析:5、//顺序串的朴素模式匹配int Index(seqstring*S, seqstring*subS) {int i = 1, j = 1; //位序从1开始while (i <= S->len&&j <= subS->len)if (S->str[i - 1] == subS->str[j - 1]){i++; j++;} //继续比较后面的字符else{i = i - j + 2; j = 1;} //本趟不匹配,设置下一趟匹配的起始位序if (j >subS->len) return(i - subS->len); //匹配成功elsereturn(-1); //匹配不成功}分析:6、//添加删除子串算法void strDelete(seqstring*S, int pos, int len) {char temp[maxsize];if (pos>= 1 &&len<= S->length - len + 1) {strncpy_s(temp, S->str, pos - 1);//strncpy_s与strncpy具有相同的功能,用于将源字符串复制到目的字符串strcpy_s(temp + pos - 1,maxsize,S->str + pos + len - 1);//strcpy_s与strcpy具有相同的功能strcpy_s(S->str,maxsize, temp);S->length = S->length - len;}}分析:7、//希尔排序void shellsort(rectype r[], int d[]){int i, j, k, h;rectype temp;int maxint = 32767;for (i = 0; i<D1; i++)r[i].key = -maxint;//设置T个监视哨k = 0;do {h = d[k];//取一趟的增量for (i = h + D1; i<N + D1; i++){temp =r[i];j = i - h;while (temp.key<r[j].key){r[j + h] =r[j];j = j - h;}r[j + h] = temp;}//组内直接插入法排序print(r, N);//输出一趟的排序结果k++;} while (h != 1);}分析:8、//折半查找索引表,块内顺序查找int blksearch(record r[], index idx[], keytype k, int n) {int i, low = 0, high = n - 1, mid, bh, find = 0;//折半查找索引表while (low <= high && !find){mid = (low + high) / 2;if (k<idx[mid].key)high = mid - 1;elseif (k>idx[mid].key)low = mid + 1;else{high = mid - 1;find = 1;}}if (low<n){i = idx[low].low;//块的起始地址bh = idx[low].high;//块的终止地址}//块内顺序查找while (i<bh&&r[i].key != k)i++;if (r[i].key != k)i = -1;return i;}分析:9、//双向起泡排序void dbubblesort(sequenlist r[], int n){int i = 1, j, noswap = 1;sequenlist temp;while (noswap) {noswap = 0;for (j = n - i + 1; j >= i + 1; j--)if (r[j].key<r[j - 1].key){noswap = 1;temp =r[j];r[j] =r[j - 1];r[j - 1] = temp;}for (j = i + 1; j <= n - i; j++)if (r[j].key>r[j + 1].key){noswap = 1;temp =r[j];r[j] =r[j + 1];r[j + 1] = temp;}for (int k = 1; k <= n; k++)printf("%5d", r[k].key);printf("\n");i++;}}分析:10。

电子科技大学20春《软件技术基础》在线作业1.doc

电子科技大学20春《软件技术基础》在线作业1.doc

1.下列操作中不是数据操作的是()。

A.删除B.排序C.构造D.查找【参考答案】: C2.在计算机系统中,操作系统是()。

A.处于裸机之上的第一层软件B.处于硬件之下的低层软件C.处于应用软件之上的系统软件D.处于系统软件之上的用户软件【参考答案】: A3.栈中输入A,B,C,D,E,F六个字符,出栈顺序是()。

A.ABCDEFB.FEDCBAC.AFECBD.FABCDE【参考答案】: B4.C语言的基本数据类型不包括A.doubleB.intC.floatD.char【参考答案】: A5.下列哪个不是线性结构()。

A.链表B.队列C.串D.树【参考答案】: D6.图的遍历有()。

A.广度优先搜索遍历B.深度优先搜索遍历C.前序遍历D.后序遍历【参考答案】: AB7.内存分配常采用的策略有()。

A.首次适用算法B.最佳适用算法C.最坏适用算法D.中等适用算法【参考答案】: ABC8.C语言的基本数据类型包括()。

A.doubleB.intC.floatD.char【参考答案】: BCD9.进程管理应具有以下功能()。

A.进程控制B.进程同步C.进程通信D.进程调度【参考答案】: ABCD10.对作业调度算法的选择要考虑三个目标是()。

A.尽量提高系统的作业吞吐量,即每天处理尽可能多的作业B.尽量使CPU 和外部设备保持忙碌状态,以提高资源利用率C.对各种作业公平合理,使用有用户都满意D.减少作业运行次数【参考答案】: ABC11.数据结构的三层次是()。

A.数据的逻辑结构B.数据的存储结构C.数据的操作集合D.非线性结构【参考答案】: ABC12.进程控制原语包括()。

A.创建原语B.撤销原语C.阻塞原语D.唤醒原语【参考答案】: ABCD13.作业的状态分为()。

A.进入状态B.后备状态C.运行状态D.完成状态【参考答案】: ABCD14.数据的逻辑结构包括()。

A.线性结构B.非线性结构C.算数结构D.几何结构【参考答案】: AB15.分时系统中作业的控制有哪些()。

软件技术基础_课后答案_周大为_西电

软件技术基础_课后答案_周大为_西电
void delete(Stack*s) {
Stack*temp; datatype x; InitS(temp); while(!EmptyS(s)) {
x=Pop(s); if(x!=m) Push(temp,x); } while(!Empty(temp)) Push(s,Pop(temp)); }
}
12、已知结点序列{21,18,37,42,65,24,19,26,45,25},
画出相应的二叉排序树,并画出删除结点 37 后的二叉排序树。有问 题
(1)
(2)删除结点 37 后
14 某密码电文由 8 个字母组成,每个字母在电文中的出现频率分别
是 7、19、2、6、32、3、21、10,试为这 8 个字母设计相应的哈
四、7
void strDelete(char*S,int i,int m) {
char temp[80];int k; k=i-1; if(i>=strlen(S)) return; else {
strncpy(temp,S,k); if(k+m>=strlen(S)) strcpy(temp+k,"\0"); else strcpy(temp+k,S+k+m); strcpy(S,temp); } } 或者: void strDelete(seqstring*S,int i,int m)
}
习题 4
四、1
int symmetry(linklist*head,stack*s) //具有头结点的单链表中存放有一个字符串,每个结点的数据域存放 一个字符。 //head 为单链表的头指针,s 为栈的结构体指针 {
int n=length(head)/2; linklist*p=head->next ; datatype x; for(int i=0;i<n;i++){

西电 C++ 面向对象程序设计 软件技术基础 课后答案

西电 C++ 面向对象程序设计 软件技术基础 课后答案

习题3 四、1int compare(SeqList*La,SeqList*Lb){int i;i=1;while(i<=La->last&&i<=Lb->Last&& La->data[i]==Lb->data[i]) i++;if(i<=La->last&&j>Lb->last|| La->data[i]>Lb->data[i]) return 1; //A>B if(i>La->last&&j<=Lb->last|| La->data[i]<Lb->data[i]) return -1; //A<B if(i>La->last&&j>Lb->last) return 0; //A=B}四、2 (1)顺序表int invert(SeqList*L){int i=1;datatype temp;while(i<=L->last/2){temp=L->data[i];L->data[i]=L->data[L->last-i+1];L->data[L->last-i+1]=temp;}}(2)链表void invert (linklist*head){linklist*p,*q,*r;p=head->next;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next->next=NULL;head->next=p;}四、5void mergelist(Linear_list*La,Linear_list*Lb,Linear_list*&Lc){Lc=(Linear_list*)malloc(sizeof(Linear_list)); //产生C表的头结点头插法Lc->next=NULL;while(La->next!=NULL&&Lb->next!=NULL) //La、Lb均非空if(La->next->data<=Lb->next->data){p=La->next;La->next=La->next->next;insert(Lc,p);}else{p=Lb->next;Lb->next=Lb->next->next;insert(Lc,p);}while(La->next!=NULL){p=La->next;La->next=La->next->next;insert(Lc,p);}while(Lb->next!=NULL){p=Lb->next;Lb->next=Lb->next->next;insert(Lc,p);}}//O(Length(La)+Length(Lb))void insert(Linear_list*Lc,Linear_list*p){p->next=Lc->next;Lc->next=p;}//O(1)四、8void deleteFront(Link*s){Link*p=s,*q;while(p->next->next!=s)p=p->next;q=p->next;p->next=s;free(q);}习题4 四、1int symmetry(linklist*head,stack*s)//具有头结点的单链表中存放有一个字符串,每个结点的数据域存放一个字符。

2017西电电院软件技术基础上机大作业答案.

2017西电电院软件技术基础上机大作业答案.

附录:原代码
实验一:第 1 题(1) //顺序表逆置的程序代码 #include<stdio.h> #include<malloc.h> //顺序表结构类型定义 typedef char datatype; const int maxsize=1024; typedef struct { datatype data[maxsize]; int last; }sequenlist; void create(sequenlist*&); void print(sequenlist*); void invert(sequenlist*); void main() { sequenlist*L; create(L);//建立顺序表 print(L);//输出顺序表 invert(L);//调用顺序表逆值的函数 print(L);//输出顺序表 } //建立顺序表 void create(sequenlist*&L) { L=(sequenlist*)malloc(sizeof(sequenlist)); L->last=0;
5
char ch; while((ch=getchar())!='*') { L->last++; L->data[L->last]=ch; } } //输出顺序表 void print(sequenlist*L) { for(int i=1;i<=L->last;i++) printf("%2c",L->data[i]); printf("\n"); } //顺序表逆置 void invert(sequenlist*L) { int n=L->last/2; for(int i=1;i<=n;i++) { char temp=L->data[i]; L->data[i]=L->data[L->last-i+1]; L->data[L->last-i+1]=temp; } } 实验一:第 1 题(2) //单链表逆置的程序代码 #include<malloc.h> #include<stdio.h> //单链表结构类型定义 typedef char datatype; typedef struct node { datatype data; struct node *next; }linklist; void create(linklist*&); void print(linklist *); void invert(linklist*); void main() { linklist*head; create(head); print(head); invert(head);//调用单链表逆置的函数 print(head);

电子科技大学-软件技术基础试题带标准答案

电子科技大学-软件技术基础试题带标准答案

………密………封………线………以………内………答………题………无………效……一、填空题(共20分,共 10题,每空1分)1.若经常需要对线性表进行插入和删除运算,则最好采用_ 链式 _存储结构,若经常需要对线性表进行查找运算,则最好采用_ 顺序 ___存储结构。

2.在操作过程中会出现“假溢出”现象的是 顺序队列 结构,解决此问题的方法是 采用循环对列 。

3.已知一棵二叉树的顺序存储结构为 则元素G 的父结点是 D 。

4. 假定一个有向图的顶点的集合为{1,2,3,4,5,6},边的集合为{<1,2>,<1,3>,<2,5>,<3,2>,<3,4>,<4,6>,<5,1>,<5,6>},则出度为2的顶点个数为 3 ,入度为1的顶点个数为 4 。

5.二分查找算法适用于 顺序存储的 数据结构,且数据的组织应该 按查找的关键字有序 。

6. 虚拟存储方式分为: 分页存储 、 分段存储 、 段页存储 。

7. 用户通过操作系统提供的 命令接口 、 系统调用、 图形用户接口来使用计算机。

8. 文件的物理结构分为: 连续 、 链接 、 索引 。

9. 因特网是由许多 大小 不同、类型 不同的网络互连而成。

10. 有表score (stuid ,name,engish ),写出查询姓名和英语成绩的查询语句 Select name,English from score 11. 主建 二、选择题(共30分,共 30题,每题1分)1.线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D ) A . 必须是连续的 B . 部分地址必须是连续的 C . 一定是不连续的 D . 连续或不连续都可以………密………封………线………以………内………答………题………无………效……2.下面哪个结构不是线性结构( B )。

A. 队列B. 图C线性表D. 栈3.一个下图所示的双链表,定义P为指针变量,则P->next->next->.prior 和P->prior->next指向的数据域的值分别是(B)A.80和20 B. 64和47 C. 64和20 D. 80和474.在一个无向图中,所有顶点的度数之和等于所有边数(C)倍。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

说明每个实验题目含有一个main函数和一些函数,与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出,供上机实验参考使用。

对于每个题目,只需要根据题目要求设计算法,补充函数定义,然后对程序进行编译、调试。

实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验内容1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n , e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

(文件夹:顺序表逆置、单链表逆置)2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。

(文件夹:分解单链表)实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验内容1.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。

(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。

)(文件夹:判字符串中心对称)2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。

编写实现该循环队列的入队和出队操作的算法。

提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。

(文件夹:循环队列)实验三串一、实验目的1.熟悉串的顺序存储结构2.掌握串的基本运算及应用二、实验内容1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。

(文件夹:模式匹配)2.若S是一个采用顺序结构存储的串,利用C的库函数strlen和strcpy(或strncpy)编写一算法void SteDelete(char*S,int I,int m),要求从S中删除从第i个字符开始的连续m 个字符。

若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均删除。

(文件夹:删除子串)实验四数组一、实验目的1.熟悉数组的结构2.掌握矩阵的压缩存储3.能够对数组和矩阵的压缩存储进行运算二、实验内容1.若在矩阵A m×n中存在一个元素A[i][j],其满足A[i][j]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。

用二维数组存储矩阵A m×n,设计算法求出矩阵中所有马鞍点。

(文件夹:找马鞍点)2.A和B是两个n×n阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。

(文件夹:对称矩阵相乘)实验五树一、实验目的1.熟悉二叉树的链式存储结构2.掌握二叉树的建立、深度优先递归遍历等算法3.能够利用遍历算法实现一些应用二、实验内容1.已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。

即按要求交换二叉树及子树的左、右子树。

(文件夹:交换左右子树)2.采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。

(文件夹:统计二叉树结点)实验六图一、实验目的1.熟悉图的邻接矩阵和邻接表的存储结构2.熟悉图的邻接矩阵和邻接表的建立算法3.掌握图的遍历算法二、实验内容1.无向图采用邻接矩阵存储,编写深度优先搜索遍历算法,从不同的顶点出发对无向图进行遍历。

(文件夹:无向图邻接矩阵)实验七排序一、实验目的1.熟悉各种内部排序算法2.能够编写程序显示排序过程中各趟排序的结果3.能够编写一些排序的算法二、实验内容1.采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。

(文件夹:希尔排序)2.编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。

(文件夹:双向起泡排序)实验八查找一、实验目的1.熟悉线性表、二叉排序树和散列表的查找2.能够编写一些查找的算法二、实验内容1.18个记录的关键字为22、12、13、8、9、20、33、42、44、38、24、48、60、58、74、49、86、53,编写分块查找的算法进行查找。

(文件夹:分块查找)2.编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数。

(文件夹:判断二叉排序树)附录:原代码实验一:第1题(1)//顺序表逆置的程序代码#include<stdio.h>#include<malloc.h>//顺序表结构类型定义typedef char datatype;const int maxsize=1024;typedef struct{ datatype data[maxsize];int last;}sequenlist;void create(sequenlist*&);void print(sequenlist*);void invert(sequenlist*);void main(){sequenlist*L;create(L);//建立顺序表print(L);//输出顺序表invert(L);//调用顺序表逆值的函数print(L);//输出顺序表}//建立顺序表void create(sequenlist*&L){L=(sequenlist*)malloc(sizeof(sequenlist));L->last=0;char ch;while((ch=getchar())!='*'){L->last++;L->data[L->last]=ch;}}//输出顺序表void print(sequenlist*L){for(int i=1;i<=L->last;i++)printf("%2c",L->data[i]);printf("\n");}//顺序表逆置void invert(sequenlist*L){int n=L->last/2;for(int i=1;i<=n;i++){char temp=L->data[i];L->data[i]=L->data[L->last-i+1];L->data[L->last-i+1]=temp;}}实验一:第1题(2)//单链表逆置的程序代码#include<malloc.h>#include<stdio.h>//单链表结构类型定义typedef char datatype;typedef struct node{datatype data;struct node *next;}linklist;void create(linklist*&);void print(linklist *);void invert(linklist*);void main(){linklist*head;create(head);print(head);invert(head);//调用单链表逆置的函数print(head);}//采用尾插法建立具有头结点的单链表void create(linklist*&head){char ch;linklist *s,*r;head=(linklist*)malloc(sizeof(linklist));r=head;while((ch=getchar())!='*'){s=(linklist*)malloc(sizeof(linklist));s->data=ch;r->next=s;r=s;}r->next=NULL;}//输出单链表void print(linklist *head)。

{linklist*p=head->next;while(p!=NULL){printf("%2c",p->data);p=p->next;}printf("\n");}//单链表逆置void invert(linklist*head){linklist*p,*q,*r;p=head->next;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next->next=NULL;head->next=p;}实验一:第2题//分解单链表的程序代码#include<stdio.h>#include<malloc.h>//链表结构类型定义typedef char datatype;typedef struct node{ datatype data;struct node *next;}linklist;void create(linklist*&);void resolve(linklist*,linklist*,linklist*,linklist*);void insert(linklist*,linklist*);void print1(linklist*);void print2(linklist*);void main(){ linklist *head,*letter,*digit,*other;create(head);print1(head);letter=(linklist*)malloc(sizeof(linklist));//建立3个空循环链表letter->next=letter;digit=(linklist*)malloc(sizeof(linklist));digit->next=digit;other=(linklist*)malloc(sizeof(linklist));other->next=other;resolve(head,letter,digit,other);//调用分解单链表的函数print2(letter);//输出循环链表print2(digit);print2(other);}//建立单链表void create(linklist*&head){ datatype x;linklist *s,*r;head=new linklist;r=head;while((x=getchar())!='$'){s=(linklist*)malloc(sizeof(linklist));s->data=x;r->next=s;r=s;}r->next=NULL;。

相关文档
最新文档