数据结构C语言上机题程序

合集下载

c语言上机操作考试题库及答案

c语言上机操作考试题库及答案

c语言上机操作考试题库及答案1. 编写一个C语言程序,计算并输出100以内所有奇数的和。

答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i < 100; i++) {if (i % 2 != 0) {sum += i;}}printf("The sum of odd numbers less than 100 is: %d\n", sum);return 0;}```2. 编写一个C语言程序,实现字符串的反转。

答案:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int length = strlen(str);for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```3. 编写一个C语言程序,计算并输出1到100之间所有能被3整除的数的和。

答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 3 == 0) {sum += i;}}printf("The sum of numbers divisible by 3 between 1and 100 is: %d\n", sum);return 0;}```4. 编写一个C语言程序,实现两个整数的交换。

数据结构第一次上机

数据结构第一次上机

第一次上机,任务有两个:1、将以下程序分别进行单步运行,掌握单步调式的方法及程序的执行流程,仔细观察变量的值。

(1)传值调用void s1(int y){y=y+1;}main(){int x=1;s1(x);printf(x);}(2)传地址调用void s2(int *y){*y=*y+1;}main(){int x=1;s2(&x);printf(x);}(3) C++的引用调用(形参相当于实参的别名)void s3(int &y){y=y+1;}main(){ int x=1;s3(x);printf(x);}(4)函数结果的带出方式#include<stdio.h>#include<stdlib.h>typedef struct{int max, min;}Data;int MIN; /*全局变量*/int fun1(int a[],int n)/*通过函数return返回最大值,通过全局变量MIN待会最小值*/{int i, max;max = MIN = a[0]; //给最大、最小值赋初值for(i=0;i<n;i++){if (a[i]>max) max = a[i];if (a[i]<MIN) MIN = a[i];}return(max);}int *fun2(int a[],int n)/*将最大、最小值放到数组b中,通过return返回*/{static int b[2];b[0] = b[1] = a[0]; //给最大、最小值赋初值int i;for(i=1;i<n;i++){if(a[i]>b[0])b[0]=a[i];if(a[i]<b[1])b[1]=a[i];}return (b);}Data *fun3(int a[],int n)/*将最大值、最小值放到结构体指针p中,通过return返回*/{Data *p;int i;p = (Data * )malloc(sizeof(Data * )); //指针初始化p->max = p->min = a[0]; //给最大、最小值赋初值for(i=1;i<n;i++){if(a[i] > p->max)p->max=a[i];if(a[i] < p->min)p->min=a[i];}return (p);}Data fun4(int a[],int n)/*将最大、最小值放到结构体p中,通过结构体p带回返回值*/{Data p;int i;p.max = p.min = a[0];for(i=1;i<n;i++){if(a[i]>p.max)p.max = a[i];if(a[i]<p.min)p.min = a[i];}return (p);}void fun5(int a[],int n,int *p,int *q)/*用指针带回返回值,指针p指向最大值,指针q指向最小值*/{int i;*p = *q = a[0]; //将最大、最小值赋初值for(i=1;i<n;i++){if(*p < a[i])*p = a[i];if(*q > a[i])*q = a[i];}}void main(){int a[10] = {1,3,9,8,4,2,5,0,7,6};int max,*p;Data *q;Data z;int *x,*y;x = (int * )malloc(sizeof(int * ));y = (int * )malloc(sizeof(int * ));max = fun1(a,10);printf("max = % d min = % d\n", max, MIN);p = fun2(a,10);printf("max = % d min = % d\n", p[0], p[1]);q = fun3(a,10);printf("max = % d min = % d\n", q -> max, q -> min);z = fun4(a,10);printf("max = % d min = % d\n", z.max, z.min);fun5(a,10,x,y);printf("max = % d min = % d\n", *x, *y);}2、验证算法2.1,2.2,2.3,掌握由算法变为程序的过程。

C语言上机程序设计题库及答案

C语言上机程序设计题库及答案

C语言上机程序设计题库【程序设计】功能:根据整型形参m,计算如下公式的值:y=sin(m)*10。

【参考代码】double y=0;y=sin(m)*10;return(y);功能:若x、y为奇数,求x到y之间的奇数和;若x、y为偶数,则求x到y之间的偶数和。

【参考代码】int i,s=0;for(i=x;i<=y;i+=2)s=s+i;return s;功能:编写程序,实现矩阵(3行3列)的转置(即行列互换)【参考代码】int i,j,t;for(i=0; i < 3; i++)for(j=0; j < i; j++){ t=array[i][j];array[i][j]=array[j][i];array[j][i]=t; }功能:求一个四位数的各位数字的立方和。

【参考代码】int d,s=0;while (n>0){d=n%10;s+=d*d*d;n/=10;}return s;功能:请编一个函数void fun(int tt[M][N],int pp[N]), tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

二维数组中的数已在主函数中赋予。

【参考代码】int i,j;for(j=0;j<N;j++){pp[j]=tt[0][j];for(i=1;i<M;i++)if(tt[i][j]<pp[j])pp[j]=tt[i][j];}功能:求一组数中大于平均值的数的个数。

【参考代码】int i,k=0;float s=0,ave;for(i=0;i<n;i++)s+=a[i];ave=s/n;printf("%f ",ave);for(i=0;i<n;i++)if(a[i]>ave)k++;return k;题目:分别统计字符串中字母、数字、空格和其他字符出现的次数(字符长度小于80)。

数据结构上机

数据结构上机

#include<stdio.h>#include<stdlib.h>#define MAX_SIZE 80 typedefstruct{//栈的数据结构,采用数组char data[MAX_SIZE];int top;}stack;intisfull(stack s){//判断栈是否已满return (++s.top==MAX_SIZE);}intisempty(stack s){//判断栈为空returns.top==-1;}void push(stack * s,charin_data) {//进栈if(isfull(*s)){printf("栈已满,不能执行操作!\n"); exit(1);}s->data[++s->top]=in_data;}void pop(stack *s){//出栈if(isempty(*s)){printf("栈已空,不能执行操作!\n"); exit(1);}s->top--;}chartop_value(stack *s){//取栈顶元素if(isempty(*s)){printf("栈已空,不能执行操作!\n"); exit(1);}return s->data[s->top];}int main(intargc,char** argv){int number;stack result;result.top=-1;intr_range;printf("输入转换的数据和对应的进制:"); scanf("%d%d",&number,&r_range);printf("%d对应的%d进制为:",number,r_range); while(number!=0){char input;if(number%r_range>=10)input=((number%r_range)-10)+'a';elseinput=((number%r_range)+'0');push(&result,input);number=number/r_range;}while(!isempty(result)){putchar(top_value(&result));pop(&result);}return 0;}#include <iostream>#include <iomanip>#include <vector>#include <queue>using namespace std;vector<queue<int>>YangHuiTrangle(int n){vector<queue<int>> result;if (n>0){queue<int>preLayer;preLayer.push(1);for(inti = 1;i<=n;i++){result.push_back(preLayer);intpreNum = 0;queue<int>numLayer;while(!preLayer.empty()){intnum = preLayer.front();preLayer.pop();numLayer.push(preNum+num);preNum = num;}numLayer.push(preNum);preLayer = numLayer;}}return result;}int main(){vector<queue<int>> result;result = YangHuiTrangle(6);for (inti = 0;i<result.size();i++){cout<<setw(result.size()-i);queue<int> temp(result[i]);while (!temp.empty()){cout<<temp.front()<<" ";temp.pop();}cout<<endl;}return 0;}#include<iostream.h>class stack{int A[5];int top;public:stack();void pushs(int e);int pops();};stack::stack(){top=0;}void stack::pushs(int e){if(top<5){A[top]=e;top++;}}int pops(){if(top>0){top--;return A[top];}}void main(){stack s=new stack; inti,k;for(i=0,i<5,i++) {cin>>k;s,pushs(k);}for(i=0,i<5,i++) {cout<<s,pops(); }}typedefstructLNode {//定义链表节点int data;structLNode *next;}LNode, *LinkList;LinkList Head; //定义全局变量链表头//构造空链表LinkListInitList( ){static LinkList head;head = (LinkList) malloc (sizeof(LNode));if( ! head) exit (OVERFLOW);head->next = NULL;return head;}//输入数据插入到链表后,创建循环链表Status CreateList(LinkList head ,int m){LinkListp,q;inti;p = head;for(i=1;i<m+1;i++) {q = (LinkList)malloc(sizeof(LNode));q->data = i;q->next = NULL;p->next = q;p = p->next;if(i == m) { p->next = Head->next; } //链成循环链表}return OK;}。

《数据结构与算法(C语言版)》上机实验2

《数据结构与算法(C语言版)》上机实验2

上机实验2 串的匹配算法及实现【实验目的】(1)了解串的相关概念。

(2)掌握串的有关存储方法。

(3)熟悉串的基本操作。

(4)通过串匹配算法的实现,掌握朴素的模式匹配算法。

【实验内容】实现朴素的模式匹配算法:要求能够实现从键盘输入主串S和子串T,并且能够从键盘指定S的第pos位为开始匹配的位置,如果匹配成功,则在屏幕输出S中符合匹配的位置,即S中与T匹配的子序列第一个字符的序号,否则,返回0。

【实验步骤】(1)在Microsoft Visual C++中创建应用程序L2。

(2)在程序中创建字符串的存储函数InitStr(),使用数组的0号单元存储字符串的长度。

(3)创建字符串的匹配函数Index()。

(4)创建主函数,实现从键盘上输入主串S、子串T,并能够指定开始匹配的位置。

(5)编译连接程序,执行并观察程序的运行效果。

【参考源代码】#include <stdio.h>#include <string.h>#define MAXSIZE 100// 字符串的最大存储长度typedef char SString[MAXSIZE+1];// 使用0号单元存储长度void InitStr(SString rs){char stmp[MAXSIZE];int i;gets(stmp);rs[0]=strlen(stmp);for (i=1;i<=rs[0];i++)rs[i]=stmp[i-1];rs[i]='\0';}int Index(SString S, SString T, int pos){// 返回T在S中第pos个字符后首次出现的位置,若不存在则返回0int i = pos,j = 1;while(i <= S[0] && j <= T[0]){if (S[i] == T[j]) // 匹配继续比较后继字符{++i;++j;}else // 不匹配,指针后退,重新开始匹配{i = i-j+2;j = 1;}}if(j>T[0])return i-T[0]; //匹配成功返回T在S中第pos个字符后首次出现的位置else return 0;} // Indexvoid main (){SString sstr;SString dstr;int pos;int n;printf("请输入主串:");InitStr(sstr);printf("请输入子串:");InitStr(dstr);printf("请输入开始匹配的位置:");scanf("%d",&pos);n=Index(sstr, dstr, pos);printf("%d\n",n);}【运行结果】运行示例:主串输入:sit please子串输入:please匹配位置输入:2运行结果如附图2所示。

C语言上机程序设计题库及答案

C语言上机程序设计题库及答案

C语言上机程序设计题库及答案在计算机科学与技术领域中,C语言是一门非常重要的编程语言。

作为高级语言,C语言广泛应用于软件开发、系统编程以及嵌入式系统等领域。

针对C语言的上机程序设计,我整理了一份题库,并提供了相应的答案,供学习和参考使用。

1. 题目1:求给定整数数组中的最大值题目描述:给定一个整数数组,编写一个程序找到数组中的最大值,并将其输出。

代码示例:```c#include <stdio.h>int findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, n);printf("The maximum value is: %d\n", max);return 0;}```2. 题目2:判断一个字符串是否为回文字符串题目描述:给定一个字符串,判断它是否为回文字符串(正读和倒读都相同)。

编写一个程序实现此功能。

代码示例:```c#include <stdio.h>#include <string.h>int isPalindrome(char str[]) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {if (str[i] != str[len - i - 1]) {return 0;}}return 1;}int main() {char str[] = "level";if (isPalindrome(str)) {printf("The string is a palindrome.\n");}else {printf("The string is not a palindrome.\n");}return 0;}```3. 题目3:计算阶乘题目描述:给定一个正整数,编写一个程序计算其阶乘。

C语言上机练习9

C语言上机练习9

上机报告9 结构体一、上机内容:1)观察以下程序:#include <stdio.h>#define FORMAT "%d\n%s\n%f\n%f\n%f\n"struct student{ int num;char name[20];float score[3]; }stu={12345, "LiLi",67.5, 89, 78.6};void main(){void print(struct student *); //形参类型指向结构体的指针变量print( &stu );} //实参为stu的起始地址void print(struct student *p) //形参为指向结构体的指针变量{printf(FORMA T,p->num,p->name,p->score[0],p->score[1],p->score[2]) ;//用指针变量调用各成员的值}1、修改程序,单独定义student结构。

struct student{ int num;char name[20];float score[3]; };请定义一个名为st的变量。

定义时不对变量赋初值。

编写一个函数,用来给结构变量赋值。

struct student st;scan(struct student *p){(*p).num=12345;(*p).score[0]=67.5;(*p).score[1]=89.0;(*p).score[2]=78.6;strcpy((*p).name,"LiLi");}2、不定义结构变量,定义一个结构指针,在内存中开辟一个空间,用来存储一个student结构体类型的数据,并以把数据{12345, "LiLi",67.5, 89, 78.6}按结构体的存储格式存储到开辟的内存空间中。

数据结构上机参考程序

数据结构上机参考程序

数据结构上机参考程序一元多项式表示及相加程序如下://Add Polynomial Pa and Pb#include<stdlib.h>#include<malloc.h>#include<conio.h>#include<stdio.h>Stuct Term{ float coef;int expn;struct Term *next;}LinkList;LinkList *CreateList_L(int n){int i;LinkList *p,*L;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;for(i=n;i>0;--i){p=(LinkList *)malloc(sizeof(LinkList));printf(“input coef=”);scanf(“%d”,&p->coef);printf(“\n”);printf(“input expn=”);scanf(“%d”,&p->expn);printf(“\n”);p->next=L->next;L->next=p;}//end of forReturn L;}//end of function CreateListChar cmp(int qa_expn,int qb->expn){if(qa_expn==qb_expn)return‟=…;elseif(qa_expn>qb_expn)return‟>‟;else return‟<…;}//end of cmp() functionLinkList *Addpolyn(LinkList *pa, LinkList *pb) {LinkList *qa,*qb,*pre,*u;float sum;qa=pa->next;qb=pb->next;pre=pa;while(qa&&qb)switch(cmp(qa->expn,qb->expn)){case …<…:pre=qa;qa=qa->next;break;case‟=…:sum=qa->coef+qb->coef;if(sum!=0.0){qa->coef=sum;pre=qa;}else{pre->next=qa->next;free(qa);}qa=pre->next;u=qb;qb=qb->next;free(u);break;case‟>‟:u=qb->next;qb->next=qa;pre->next=qb;pre=qb;qb=u;break;}//end of switchif(!qa)pre->next=qb;free(qb);return pa;}end of Addpolyn() functionVoid main(){LinkList *pa,*pb,*pc,*p;int NodeNum_pa,NodeNum_pb;Printf(“input NodeNum_pa:”);Scanf(“%d”,& NodeNum_pa);printf(“Please input the pa.coef and pa.expn”);pa=CreateList_L(NodeNum_pa);Printf(“input NodeNum_pb:”);Scanf(“%d”,& NodeNum_pb);printf(“Please input the pb.coef and pb.expn”);pb= CreateList_L( NodeNum_pb);Pc=Addpolyn(pa,pb);P=pc;printf(“result:\n”);while(p->next){p=p->next;printf(“pc.coef=%d, pc.expn=%d\n”, p->coef, p- >expn );}//end of whilegetch();}end of main() function行编辑程序。

数据结构上机实验题

数据结构上机实验题

数据结构上机实验题数据结构实验⼀线性表270。

实验⽬的:1.熟悉C语⾔的上机环境,进⼀步掌握C语⾔的结构特点。

2.掌握线性表的顺序存储结构的定义及C语⾔实现。

3.掌握线性表的链式存储结构——单链表的定义及C语⾔实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

实验内容:1.顺序线性表的建⽴、插⼊及删除。

2.链式线性表的建⽴、插⼊及删除。

实验步骤:1.建⽴含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2.利⽤前⾯的实验先建⽴⼀个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插⼊元素68。

3.建⽴⼀个带头结点的单链表,结点的值域为整型数据。

要求将⽤户输⼊的数据按尾插⼊法来建⽴相应单链表。

实现提⽰:1.由于C语⾔的数组类型也有随机存取的特点,⼀维数组的机内表⽰就是顺序结构。

因此,可⽤C语⾔的⼀维数组实现线性表的顺序存储。

在此,我们利⽤C语⾔的结构体类型定义顺序表:#define MAXSIZE 1024-可编辑修改-typedef int elemtype; /* 线性表中存放整型元素*/typedef struct{elemtype vec[MAXSIZE];int len; /* 顺序表的长度*/}sequenlist;将此结构定义放在⼀个头⽂件sqlist.h⾥,可避免在后⾯的参考程序中代码重复书写,另外在该头⽂件⾥给出顺序表的建⽴及常量的定义。

2. 注意如何取到第i个元素,在插⼊过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。

3.单链表的结点结构除数据域外,还含有⼀个指针域。

⽤C语⾔描述结点结构如下:typedef int elemtype;typedef struct node{elemtype data; //数据域struct node *next; //指针域}linklist;注意结点的建⽴⽅法及构造新结点时指针的变化。

(完整word版)c语言上机题

(完整word版)c语言上机题
if(a[n][0]=='0')
break;
}
for(i=1;i<=n;i++)
for(j=0;j<n-i;j++)
{
if(strcmp(a[j],a[j+1]))
{
strcpy(b,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],b);
}
}
for(i=0;i<n;i++)
printf("%f\n",s);
}
else
printf("不能构成三角形");
}
//vc3
//prog3.cpp
//编写程序求一个字符串的第n个字符开始、长度为m的子串
#include <stdio.h>
main()
{
char a[100],b[100]={'0'};
int m,n,i,j;
gets(a);
gets(b);
if(cmp(a,b))
{
printf("口令正确!");
break;
}
else
{
printf("口令错误!您还有%d次机会!",2-i);
}
}
}
//vc5
//prog3.cpp
//编写实现求1!+2!+...+10!.
#include <stdio.h>
int fun(int n)
b=c;
c=temp;
}
if(a>c)

数据结构上机指导源程序

数据结构上机指导源程序

/*文件名:algo2-1.cpp*/#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType elem[MaxSize];int length;} SqList;void InitList(SqList *&L){L=(SqList *)malloc(sizeof(SqList));L->length=0;}void DestroyList(SqList *L){free(L);}int ListEmpty(SqList *L){return(L->length==0);}int ListLength(SqList *L){return(L->length);}void DispList(SqList *L){int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c",L->elem[i]);printf("\n");}int GetElem(SqList *L,int i,ElemType &e) {if (i<1 || i>L->length)return 0;e=L->elem[i-1];return 1;}int LocateElem(SqList *L, ElemType e) { int i=0;while (i<L->length && L->elem[i]!=e) i++;if (i>=L->length)return 0;elsereturn i+1;}int ListInsert(SqList *&L,int i,ElemType e){int j;if (i<1 || i>L->length+1)return 0;i--; /*将顺序表位序转化为elem下标*/for (j=L->length;j>i;j--) /*将elem[i]及后面元素后移一个位置*/ L->elem[j]=L->elem[j-1];L->elem[i]=e;L->length++; /*顺序表长度增1*/return 1;}int ListDelete(SqList *&L,int i,ElemType &e){int j;if (i<1 || i>L->length)return 0;i--; /*将顺序表位序转化为elem下标*/e=L->elem[i];for (j=i;j<L->length-1;j++)L->elem[j]=L->elem[j+1];L->length--;return 1;}/*文件名:algo2-2.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct LNode /*定义单链表结点类型*/{ElemType data;struct LNode *next;} LinkList;void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList)); /*创建头结点*/L->next=NULL;} void DestroyList(LinkList *&L){LinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p);}int ListEmpty(LinkList *L){return(L->next==NULL);}int ListLength(LinkList *L){LinkList *p=L;int i=0;while (p->next!=NULL){i++;p=p->next;}return(i);}void DispList(LinkList *L){LinkList *p=L->next;while (p!=NULL){printf("%c",p->data);p=p->next;}printf("\n");}int GetElem(LinkList *L,int i,ElemType &e) {int j=0;LinkList *p=L;while (j<i && p!=NULL){j++;p=p->next;} if (p==NULL)return 0;else{e=p->data;return 1;}}int LocateElem(LinkList *L,ElemType e){LinkList *p=L->next;int n=1;while (p!=NULL && p->data!=e){p=p->next;n++;}if (p==NULL)return(0);elsereturn(n);}int ListInsert(LinkList *&L,int i,ElemType e){int j=0;LinkList *p=L,*s;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{s=(LinkList *)malloc(sizeof(LinkList)); /*创建新结点*s*/ s->data=e;s->next=p->next; /*将*s 插入到*p 之后*/p->next=s;return 1;}}int ListDelete(LinkList *&L,int i,ElemType &e){ int j=0;LinkList *p=L,*q;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{q=p->next; /*q 指向要删除的结点*/p->next=q->next; /*从单链表中删除*q 结点*/free(q); /*释放*q 结点*/return 1;}}/*文件名:algo2-3.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct DNode /*定义双链表结点类型*/{ElemType data;struct DNode *prior; /*指向前驱结点*/struct DNode *next; /*指向后继结点*/} DLinkList;void InitList(DLinkList *&L){L=(DLinkList *)malloc(sizeof(DLinkList)); /*创建头结点*/ L->prior=L->next=NULL;}void DestroyList(DLinkList *&L){DLinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p);}int ListEmpty(DLinkList *L){ return(L->next==NULL);}int ListLength(DLinkList *L){DLinkList *p=L;int i=0;while (p->next!=NULL){i++;p=p->next;}return(i);}void DispList(DLinkList *L){DLinkList *p=L->next;while (p!=NULL){printf("%c",p->data);p=p->next;}printf("\n");}int GetElem(DLinkList *L,int i,ElemType &e) {int j=0;DLinkList *p=L;while (j<i && p!=NULL){j++;p=p->next;}if (p==NULL)return 0;else{e=p->data;return 1;}}int LocateElem(DLinkList *L,ElemType e) {int n=1;DLinkList *p=L->next;while (p!=NULL && p->data!=e) {n++;p=p->next;}if (p==NULL)return(0);elsereturn(n);}int ListInsert(DLinkList *&L,int i,ElemType e){int j=0;DLinkList *p=L,*s;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{s=(DLinkList *)malloc(sizeof(DLinkList)); /*创建新结点*s*/ s->data=e;s->next=p->next; /*将*s 插入到*p 之后*/if (p->next!=NULL) p->next->prior=s;s->prior=p;p->next=s;return 1;}}int ListDelete(DLinkList *&L,int i,ElemType &e){int j=0;DLinkList *p=L,*q;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{ q=p->next; /*q 指向要删除的结点*/if (q==NULL) return 0; /*不存在第i个结点*/p->next=q->next; /*从单链表中删除*q 结点*/if (p->next!=NULL) p->next->prior=p;free(q); /*释放*q 结点*/return 1;}void Sort(DLinkList *&head) /*双链表元素排序*/{DLinkList *p=head->next,*q,*r;if (p!=NULL) /*若原双链表中有一个或以上的数据结点*/{r=p->next; /*r 保存*p 结点后继结点的指针*/p->next=NULL; /*构造只含一个数据结点的有序表*/p=r;while (p!=NULL){r=p->next; /*r 保存*p 结点后继结点的指针*/q=head;while (q->next!=NULL && q->next->data<p->data) /*在有序表中找插入*p 的前驱结点*q*/q=q->next;p->next=q->next; /*将*p 插入到*q 之后*/if (q->next!=NULL) q->next->prior=p;q->next=p;p->prior=q;p=r;}}}/*文件名:algo2-4.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct LNode /*定义单链表结点类型*/{ElemType data;struct LNode *next;} LinkList;void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList)); /*创建头结点*/L->next=L;} void DestroyList(LinkList *&L){LinkList *p=L,*q=p->next;while (q!=L){free(p);p=q;q=p->next;free(p);}int ListEmpty(LinkList *L){return(L->next==L);}int ListLength(LinkList *L){LinkList *p=L;int i=0;while (p->next!=L){i++;p=p->next;}return(i);}void DispList(LinkList *L){LinkList *p=L->next;while (p!=L){printf("%c",p->data);p=p->next;}printf("\n");}int GetElem(LinkList *L,int i,ElemType &e) {int j=0;LinkList *p;if (L->next!=L) /*单链表不为空表时*/ {if (i==1){e=L->next->data; return 1;}else /*i 不为1 时*/{p=L->next;while (j<i-1 && p!=L){j++;p=p->next;if (p==L)return 0;else{e=p->data;return 1;}}}else /*单链表为空表时*/return 0;}int LocateElem(LinkList *L,ElemType e){LinkList *p=L->next;int n=1;while (p!=L && p->data!=e){p=p->next;n++;}if (p==L)return(0);elsereturn(n);}int ListInsert(LinkList *&L,int i,ElemType e){int j=0;LinkList *p=L,*s;if (p->next==L || i==1) /*原单链表为空表或i==1时*/{s=(LinkList *)malloc(sizeof(LinkList)); /*创建新结点*s*/s->data=e; s->next=p->next; /*将*s 插入到*p 之后*/ p->next=s;return 1;}else{p=L->next;while (j<i-2 && p!=L){j++;p=p->next;}if (p==L) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{s=(LinkList *)malloc(sizeof(LinkList)); /*创建新结点*s*/ s->data=e;s->next=p->next; /*将*s 插入到*p 之后*/p->next=s;return 1;}}}int ListDelete(LinkList *&L,int i,ElemType &e){int j=0;LinkList *p=L,*q;if (p->next!=L) /*原单链表不为空表时*/{if (i==1) /*i==1 时*/{q=L->next; /*删除第1 个结点*/L->next=q->next;free(q);return 1;}else /*i 不为1 时*/{p=L->next;while (j<i-2 && p!=L){j++;p=p->next; }if (p==L) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{q=p->next; /*q 指向要删除的结点*/p->next=q->next; /*从单链表中删除*q 结点*/free(q); /*释放*q 结点*/return 1;}}}else return 0;}/*文件名:algo2-5.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct DNode /*定义双链表结点类型*/{ElemType data;struct DNode *prior; /*指向前驱结点*/struct DNode *next; /*指向后继结点*/} DLinkList;void InitList(DLinkList *&L){L=(DLinkList *)malloc(sizeof(DLinkList)); /*创建头结点*/ L->prior=L->next=L;}void DestroyList(DLinkList *&L){DLinkList *p=L,*q=p->next;while (q!=L){free(p);p=q;q=p->next;}free(p);}int ListEmpty(DLinkList *L){return(L->next==L);}int ListLength(DLinkList *L) {DLinkList *p=L;int i=0;while (p->next!=L){i++;p=p->next;}return(i);}void DispList(DLinkList *L){DLinkList *p=L->next;while (p!=L){printf("%c",p->data);p=p->next;}printf("\n");}int GetElem(DLinkList *L,int i,ElemType &e) {int j=0;DLinkList *p;if (L->next!=L) /*双链表不为空表时*/ {if (i==1){e=L->next->data;return 1;}else /*i 不为1 时*/{p=L->next;while (j<i-1 && p!=L){j++;p=p->next;}if (p==L)return 0;else{e=p->data;return 1; }}}else /*双链表为空表时*/return 0;}int LocateElem(DLinkList *L,ElemType e) {int n=1;DLinkList *p=L->next;while (p!=NULL && p->data!=e){n++;p=p->next;}if (p==NULL)return(0);elsereturn(n);}int ListInsert(DLinkList *&L,int i,ElemType e){int j=0;DLinkList *p=L,*s;if (p->next==L) /*原双链表为空表时*/{s=(DLinkList *)malloc(sizeof(DLinkList)); /*创建新结点*s*/ s->data=e;p->next=s;s->next=p;p->prior=s;s->prior=p;return 1;}else if (i==1) /*原双链表不为空表但i=1时*/{s=(DLinkList *)malloc(sizeof(DLinkList)); /*创建新结点*s*/ s->data=e;s->next=p->next;p->next=s; /*将*s 插入到*p 之后*/s->next->prior=s;s->prior=p;return 1;}else{p=L->next;while (j<i-2 && p!=L) { j++;p=p->next;}if (p==L) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{s=(DLinkList *)malloc(sizeof(DLinkList)); /*创建新结点*s*/ s->data=e;s->next=p->next; /*将*s 插入到*p 之后*/if (p->next!=NULL) p->next->prior=s;s->prior=p;p->next=s;return 1;}}}int ListDelete(DLinkList *&L,int i,ElemType &e){int j=0;DLinkList *p=L,*q;if (p->next!=L) /*原双链表不为空表时*/{if (i==1) /*i==1 时*/{q=L->next; /*删除第1 个结点*/L->next=q->next;q->next->prior=L;free(q);return 1;}else /*i 不为1 时*/{p=L->next;while (j<i-2 && p!=NULL){j++;p=p->next;}if (p==NULL) /*未找到第i-1 个结点*/return 0;else /*找到第i-1个结点*p*/{q=p->next; /*q 指向要删除的结点*/ if (q==NULL) return 0; /*不存在第i个结点*/p->next=q->next; /*从单链表中删除*q 结点*/if (p->next!=NULL) p->next->prior=p;free(q); /*释放*q 结点*/return 1;}}}else return 0; /*原双链表为空表时*/}/*文件名:algo3-1.cpp*/#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct{ElemType elem[MaxSize];int top; /*栈指针*/} SqStack;void InitStack(SqStack *&s){s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1;}void ClearStack(SqStack *&s){free(s);}int StackLength(SqStack *s){return(s->top+1);}int StackEmpty(SqStack *s){return(s->top==-1);}int Push(SqStack *&s,ElemType e) {if (s->top==MaxSize-1)return 0;s->top++;s->elem[s->top]=e;return 1;} int Pop(SqStack *&s,ElemType &e) {if (s->top==-1)return 0;e=s->elem[s->top];s->top--;return 1;}int GetTop(SqStack *s,ElemType &e) {if (s->top==-1)return 0;e=s->elem[s->top];return 1;}void DispStack(SqStack *s){int i;for (i=s->top;i>=0;i--)printf("%c ",s->elem[i]);printf("\n");}/*文件名:algo3-2.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct linknode{ElemType data; /*数据域*/ struct linknode *next; /*指针域*/ } LiStack;void InitStack(LiStack *&s){s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL;}void ClearStack(LiStack *&s){LiStack *p=s->next;while (p!=NULL){free(s);s=p;p=p->next;} }int StackLength(LiStack *s){int i=0;LiStack *p;p=s->next;while (p!=NULL){i++;p=p->next;}return(i);}int StackEmpty(LiStack *s){return(s->next==NULL);}void Push(LiStack *&s,ElemType e){LiStack *p;p=(LiStack *)malloc(sizeof(LiStack));p->data=e;p->next=s->next; /*插入*p 结点作为第一个数据结点*/ s->next=p;}int Pop(LiStack *&s,ElemType &e){LiStack *p;if (s->next==NULL) /*栈空的情况*/return 0;p=s->next; /*p 指向第一个数据结点*/e=p->data;s->next=p->next;free(p);return 1;}int GetTop(LiStack *s,ElemType &e){if (s->next==NULL) /*栈空的情况*/return 0;e=s->next->data;return 1;}void DispStack(LiStack *s) {LiStack *p=s->next;while (p!=NULL){printf("%c ",p->data);p=p->next;}printf("\n");}/*文件名:algo3-3.cpp*/#include <stdio.h>#include <malloc.h>#define MaxSize 5typedef char ElemType;typedef struct{ElemType elem[MaxSize];int front,rear; /*队首和队尾指针*/void InitQueue(SqQueue *&q){q=(SqQueue *)malloc (sizeof(SqQueue));q->front=q->rear=0;}void ClearQueue(SqQueue *&q){free(q);}int QueueEmpty(SqQueue *q){return(q->front==q->rear);}int QueueLength(SqQueue *q){return (q->rear-q->front+MaxSize)%MaxSize; }int enQueue(SqQueue *&q,ElemType e){if ((q->rear+1)%MaxSize==q->front) /*队满*/ return 0;q->rear=(q->rear+1)%MaxSize;q->elem[q->rear]=e;return 1;}int deQueue(SqQueue *&q,ElemType &e) {if (q->front==q->rear) /*队空*/return 0;q->front=(q->front+1)%MaxSize;e=q->elem[q->front];return 1;}/*文件名:algo3-4.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct qnode{ElemType data;struct qnode *next;} QNode;typedef struct{QNode *front;} LiQueue;void InitQueue(LiQueue *&q){q=(LiQueue *)malloc(sizeof(LiQueue));q->front=q->rear=NULL;}void ClearQueue(LiQueue *&q){QNode *p=q->front,*r;if (p!=NULL) /*释放数据结点占用空间*/ {r=p->next;while (r!=NULL){free(p);p=r;r=p->next;}}free(q); /*释放头结点占用空间*/}int QueueLength(LiQueue *q){int n=0;QNode *p=q->front;while (p!=NULL) {n++;p=p->next;}return(n);}int QueueEmpty(LiQueue *q){if (q->rear==NULL)return 1;elsereturn 0;}void enQueue(LiQueue *&q,ElemType e) {QNode *s;s=(QNode *)malloc(sizeof(QNode));s->data=e;s->next=NULL;if (q->rear==NULL) /*若链队为空,则新结点是队首结点又是队尾结点*/ q->front=q->rear=s;else{q->rear->next=s; /*将*s结点链到队尾,rear指向它*/q->rear=s;}}int deQueue(LiQueue *&q,ElemType &e){QNode *t;if (q->rear==NULL) /*队列为空*/return 0;if (q->front==q->rear) /*队列中只有一个结点时*/{t=q->front;q->front=q->rear=NULL;}else /*队列中有多个结点时*/{t=q->front;q->front=q->front->next;}e=t->data;free(t); return 1;}/*文件名:algo4-1.cpp*/#include <stdio.h>#define MaxSize 100 /*最多的字符个数*/typedef struct{ char ch[MaxSize]; /*定义可容纳MaxSize个字符的空间*/ int len; /*标记当前实际串长*/} SqString;void StrAssign(SqString &str,char cstr[]) /*str为引用型参数*/{int i;for (i=0;cstr[i]!='\0';i++)str.ch[i]=cstr[i];str.len=i;}void StrCopy(SqString &s,SqString t) /*s为引用型参数*/{int i;for (i=0;i<t.len;i++)s.ch[i]=t.ch[i];s.len=t.len;}int StrEqual(SqString s,SqString t){int same=1,i;if (s.len!=t.len) /*长度不相等时返回0*/same=0;else{for (i=0;i<s.len;i++)if (s.ch[i]!=t.ch[i]) /*有一个对应字符不相同时返回0*/same=0;}return same;}int StrLength(SqString s){return s.len;}SqString Concat(SqString s,SqString t){SqString str;int i;str.len=s.len+t.len; for (i=0;i<s.len;i++) /*将s.ch[0]~s.ch[s.len-1]复制到str*/ str.ch[i]=s.ch[i];for (i=0;i<t.len;i++) /*将t.ch[0]~t.ch[t.len-1]复制到str*/str.ch[s.len+i]=t.ch[i];return str;}SqString SubStr(SqString s,int i,int j){SqString str;int k;str.len=0;if (i<=0 || i>s.len || j<0 || i+j-1>s.len){printf("参数不正确\n");return str; /*参数不正确时返回空串*/}for (k=i-1;k<i+j-1;k++) /*将s.ch[i]~s.ch[i+j]复制到str*/str.ch[k-i+1]=s.ch[k];str.len=j;return str;}SqString InsStr(SqString s1,int i,SqString s2){int j;SqString str;str.len=0;if (i<=0 || i>s1.len+1) /*参数不正确时返回空串*/{printf("参数不正确\n");return s1;}for (j=0;j<i-1;j++) /*将s1.ch[0]~s1.ch[i-2]复制到str*/ str.ch[j]=s1.ch[j];for (j=0;j<s2.len;j++) /*将s2.ch[0]~s2.ch[s2.len-1]复制到str*/ str.ch[i+j-1]=s2.ch[j];for (j=i-1;j<s1.len;j++) /*将s1.ch[i-1]~s.ch[s1.len-1]复制到str*/ str.ch[s2.len+j]=s1.ch[j];str.len=s1.len+s2.len;return str;}SqString DelStr(SqString s,int i,int j){int k;SqString str; str.len=0;if (i<=0 || i>s.len || i+j>s.len+1) /*参数不正确时返回空串*/{printf("参数不正确\n");return str;}for (k=0;k<i-1;k++) /*将s.ch[0]~s.ch[i-2]复制到str*/str.ch[k]=s.ch[k];for (k=i+j-1;k<s.len;k++)/*将s.ch[i+j-1]~ch[s.len-1]复制到str*/ str.ch[k-j]=s.ch[k];str.len=s.len-j;return str;}SqString RepStr(SqString s,int i,int j,SqString t){int k;SqString str;str.len=0;if (i<=0 || i>s.len || i+j-1>s.len) /*参数不正确时返回空串*/{printf("参数不正确\n");return str;}for (k=0;k<i-1;k++) /*将s.ch[0]~s.ch[i-2]复制到str*/str.ch[k]=s.ch[k];for (k=0;k<t.len;k++) /*将t.ch[0]~t.ch[t.len-1]复制到str*/ str.ch[i+k-1]=t.ch[k];for (k=i+j-1;k<s.len;k++) /*将s.ch[i+j-1]~ch[s.len-1]复制到str*/ str.ch[t.len+k-j]=s.ch[k];str.len=s.len-j+t.len;return str;}void DispStr(SqString str){int i;if (str.len>0){for (i=0;i<str.len;i++)printf("%c",str.ch[i]);printf("\n");}}/*文件名:algo4-2.cpp*/#include <stdio.h>#include <malloc.h> typedef struct snode{char data;struct snode *next;} LiString;void StrAssign(LiString *&s,char t[]){int i;LiString *r,*p;s=(LiString *)malloc(sizeof(LiString));s->next=NULL;r=s;for (i=0;t[i]!='\0';i++){p=(LiString *)malloc(sizeof(LiString));p->data=t[i];p->next=NULL;r->next=p;r=p;}}void StrCopy(LiString *&s,LiString *t){LiString *p=t->next,*q,*r;s=(LiString *)malloc(sizeof(LiString));s->next=NULL;s->next=NULL;r=s;while (p!=NULL) /*将t 的所有结点复制到s*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}}int StrEqual(LiString *s,LiString *t){LiString *p=s->next,*q=t->next;while (p!=NULL && q!=NULL && p->data==q->data) {p=p->next;q=q->next;}if (p==NULL && q==NULL)return 1;elsereturn 0;} int StrLength(LiString *s){int i=0;LiString *p=s->next;while (p!=NULL){i++;p=p->next;}return i;}LiString *Concat(LiString *s,LiString *t){LiString *str,*p=s->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str;while (p!=NULL) /*将s 的所有结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}p=t->next;while (p!=NULL) /*将t 的所有结点复制到str*/{q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}return str;}LiString *SubStr(LiString *s,int i,int j){int k;LiString *str,*p=s->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str;if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s)){printf("参数不正确\n");return str; /*参数不正确时返回空串*/}for (k=0;k<i-1;k++) p=p->next;for (k=1;k<=j;k++) /*将s 的第i个结点开始的j 个结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}return str;}LiString *InsStr(LiString *s,int i,LiString *t){int k;LiString *str,*p=s->next,*p1=t->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str;if (i<=0 || i>StrLength(s)+1) /*参数不正确时返回空串*/{printf("参数不正确\n");return str;}for (k=1;k<i;k++) /*将s 的前i个结点复制到str*/{q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}while (p1!=NULL) /*将t 的所有结点复制到str*/{q=(LiString *)malloc(sizeof(LiString));q->data=p1->data;q->next=NULL;r->next=q;r=q;p1=p1->next;}while (p!=NULL) /*将*p 及其后的结点复制到str*/{q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}return str;} LiString *DelStr(LiString *s,int i,int j){int k;LiString *str,*p=s->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str;if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s)){printf("参数不正确\n");return str; /*参数不正确时返回空串*/}for (k=0;k<i-1;k++) /*将s 的前i-1 个结点复制到str*/{q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}for (k=0;k<j;k++) /*让p 沿next 跳j 个结点*/p=p->next;while (p!=NULL) /*将*p 及其后的结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}return str;}LiString *RepStr(LiString *s,int i,int j,LiString *t){int k;LiString *str,*p=s->next,*p1=t->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str;if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s)){printf("参数不正确\n");return str; /*参数不正确时返回空串*/}for (k=0;k<i-1;k++) /*将s 的前i-1 个结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL; r->next=q;r=q;p=p->next;}for (k=0;k<j;k++) /*让p 沿next 跳j 个结点*/p=p->next;while (p1!=NULL) /*将t 的所有结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p1->data;q->next=NULL;r->next=q;r=q;p1=p1->next;}while (p!=NULL) /*将*p 及其后的结点复制到str*/ {q=(LiString *)malloc(sizeof(LiString));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}return str;}void DispStr(LiString *s){LiString *p=s->next;while (p!=NULL){printf("%c",p->data);p=p->next;}printf("\n");}/*文件名:algo7-1.cpp*/#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct node{ElemType data; /*数据元素*/struct node *lchild; /*指向左孩子*/struct node *rchild; /*指向右孩子*/} BTNode;void CreateBTNode(BTNode *&b,char *str) /*由str串创建二叉链*/{BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0;char ch;b=NULL; /*建立的二叉树初始时为空*/ch=str[j];while (ch!='\0') /*str未扫描完时循环*/{switch(ch){case '(':top++;St[top]=p;k=1; break; /*为左结点*/case ')':top--;break;case ',':k=2; break; /*为右结点*/default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if (b==NULL) /*p 指向二叉树的根结点*/ b=p;else /*已建立二叉树根结点*/{switch(k){case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;}}}j++;ch=str[j];}}BTNode *FindNode(BTNode *b,ElemType x) /*返回data域为x 的结点指针*/ {BTNode *p;if (b==NULL)return NULL;else if (b->data==x)return b;else{p=FindNode(b->lchild,x);if (p!=NULL)return p;elsereturn FindNode(b->rchild,x);}} BTNode *LchildNode(BTNode *p) /*返回*p 结点的左孩子结点指针*/{return p->lchild;}BTNode *RchildNode(BTNode *p) /*返回*p 结点的右孩子结点指针*/{return p->rchild;}int BTNodeDepth(BTNode *b) /*求二叉树b的深度*/{int lchilddep,rchilddep;if (b==NULL)return(0); /*空树的高度为0*/else{lchilddep=BTNodeDepth(b->lchild); /*求左子树的高度为lchilddep*/rchilddep=BTNodeDepth(b->rchild); /*求右子树的高度为rchilddep*/ return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);}}void DispBTNode(BTNode *b) /*以括号表示法输出二叉树*/{if (b!=NULL){printf("%c",b->data);if (b->lchild!=NULL || b->rchild!=NULL){printf("(");DispBTNode(b->lchild);if (b->rchild!=NULL) printf(",");DispBTNode(b->rchild);printf(")");}}}int BTWidth(BTNode *b) /*求二叉树b 的宽度*/{struct{int lno; /*结点的层次编号*/BTNode *p; /*结点指针*/} Qu[MaxSize]; /*定义顺序非循环队列*/int front,rear; /*定义队首和队尾指针*/int lnum,max,i,n; front=rear=0; /*置队列为空队*/ if (b!=NULL){rear++;Qu[rear].p=b; /*根结点指针入队*/Qu[rear].lno=1; /*根结点的层次编号为1*/while (rear!=front) /*队列不为空*/{front++;b=Qu[front].p; /*队头出队*/lnum=Qu[front].lno;if (b->lchild!=NULL) /*左孩子入队*/{rear++;Qu[rear].p=b->lchild;Qu[rear].lno=lnum+1;}if (b->rchild!=NULL) /*右孩子入队*/{rear++;Qu[rear].p=b->rchild;Qu[rear].lno=lnum+1;}}max=0;lnum=1;i=1;while (i<=rear){n=0;while (i<=rear && Qu[i].lno==lnum){n++;i++;}lnum=Qu[i].lno;if (n>max) max=n;}return max;}elsereturn 0;}int Nodes(BTNode *b) /*求二叉树b的结点个数*/{int num1,num2;if (b==NULL) return 0;else if (b->lchild==NULL && b->rchild==NULL) return 1;else{num1=Nodes(b->lchild);num2=Nodes(b->rchild);return (num1+num2+1);}}int LeafNodes(BTNode *b) /*求二叉树b的叶子结点个数*/ {int num1,num2;if (b==NULL)return 0;else if (b->lchild==NULL && b->rchild==NULL) return 1;else{num1=LeafNodes(b->lchild);num2=LeafNodes(b->rchild);return (num1+num2);}}/*文件名:algo8-1.cpp*/#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct lnode{ int tag; /*结点类型标识*/union{。

数据结构上机题

数据结构上机题

数据结构上机题//1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。

#include"stdio.h"#include"stdlib.h"#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OVERFLOW -2#define OK 1typedef struct{ int *elem;int length;int listsize;}SqList;int InitList_Sq(SqList &L){L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}void MergeList_Sq(SqList La,SqList Lb,SqList &Lc){int *pa,*pa_last,*pb,*pb_last,*pc;pa=La.elem;pa_last=La.elem+La.length-1;pb=Lb.elem;pb_last=Lb.elem+Lb.length-1;Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(int*)malloc(Lc.listsize*sizeof(int));if(!Lc.elem)exit(OVERFLOW);while(pa<=pa_last&&pb<=pb_last){if(*pa<=*pb)*pc++=*pa++;else *pc++=*pb++;}while(pa<=pa_last)*pc++=*pa++;while(pb<=pb_last)*pc++=*pb++;}int Input(SqList &L){ int i,j;int *pa=L.elem;printf("要输入的元素个数:");scanf("%d",&i);printf("输入有序序列:");for(j=0;j<i;j++){ scanf("%d",pa++);L.length=i;}printf("\n");return OK;}int Output(SqList &L){ printf("输出序列:");int i=0;while(i<L.length)printf("%d ",L.elem[i++]);printf("\n");return OK;}int main(){SqList La,Lb,Lc;InitList_Sq(La);InitList_Sq(Lb);InitList_Sq(Lc);Input(La);Input(Lb);MergeList_Sq(La,Lb,Lc);Output(Lc);return OK;}//2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出"YSE";否则,将它插入到序列中使它仍然有序,并输出排序后的序列。

《数据结构与算法(C语言版)》上机实验4

《数据结构与算法(C语言版)》上机实验4

上机实验4 二叉树的遍历【实验目的】(1)掌握指针变量的含义及使用方法。

(2)熟悉二叉树结点的结构。

(3)掌握二叉树每一种操作具体实现的方法。

(4)学会利用递归的方法实现二叉树的遍历算法。

【实验内容】实现对二叉树的如下操作:(1)创建二叉树。

(2)先序遍历二叉树。

(3)中序遍历二叉树。

(4)后序遍历二叉树。

(5)按层遍历二叉树。

要求能够从键盘上输入建树的结点内容,并且将遍历的结果输出在屏幕上。

【实验步骤】(1)在Microsoft Visual C++中创建应用程序L4。

(2)在程序中创建二叉树的存储结构BiTNode,以链表作为存储结构。

(3)创建CreateBiTree()函数,实现创建二叉树的操作,能够按先序次序从键盘输入结点内容,空格表示空树。

(4)创建PreOrderTraverse()函数,用递归的方法实现先序遍历二叉树的操作。

(5)创建InOrderTraverse()函数,用递归的方法实现中序遍历二叉树的操作。

(6)创建PostOrderTraverse()函数,用递归的方法实现后序遍历二叉树的操作。

(7)创建LevelOrderTraverse()函数,实现按层遍历二叉树的操作。

(8)创建主函数,用switch语句实现从键盘上输入字符,选择要执行的操作。

(9)编译连接程序,执行并观察程序的运行效果。

【参考源代码】#include "stdlib.h"#include "stdio.h"typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,* BiTree;void CreateBiTree(BiTree &T){ //按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树char ch;scanf("%c",&ch);if (ch==' ') T=NULL;else{if (!(T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(-1);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}}//CreateBiTreevoid PreOrderTraverse(BiTree T){ //先序遍历if(T){printf("%c ",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}}//PreOrderTraversevoid InOrderTraverse(BiTree T){ //中序遍历if(T){InOrderTraverse(T->lchild);printf("%c ",T->data);InOrderTraverse(T->rchild);}}//InOrderTraversevoid PostOrderTraverse(BiTree T){ //后序遍历if(T){PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c ",T->data);}}//PostOrderTraversevoid LevelOrderTraverse(BiTree T){ //按层遍历const int MaxLength=100;BiTree Q[MaxLength];Q[0]=T;int front=0,rear=1;while(front<rear){if(Q[front]){printf("%c",Q[front]->data);Q[rear++]=Q[front]->lchild;Q[rear++]=Q[front]->rchild;front++;}else{front++;}}}//LevelOrderTraversevoid main(){BiTree T=NULL;char select;while(1){printf("请选择要执行的操作:\n");printf("1.创建二叉树\n");printf("2.二叉树的递归遍历算法(前、中、后)\n");printf("3.二叉树的层序遍历算法\n");printf("0.退出\n");fflush(stdin);scanf("%c",&select);fflush(stdin);switch(select){case '0':return;case '1':printf("请按先序次序输入各结点的值,以空格表示空树(输入时可连续输入):\n");CreateBiTree(T);printf("\n");break;case '2':printf("先序遍历:");PreOrderTraverse(T);printf("\n中序遍历:");InOrderTraverse(T);printf("\n后序遍历:");PostOrderTraverse(T);printf("\n\n");break;case '3':printf("层序遍历:");LevelOrderTraverse(T);printf("\n\n");break;default:printf("请确认选择项!\n\n") ;}//end switch}//end while}//end main【实验结果】运行示例:构建如下二叉树,并且将其遍历的结果输出在屏幕上。

数据结构上机题目

数据结构上机题目

数据结构上机题目一、问题描述我们要实现一个简单的学生信息管理系统,该系统能够对学生的基本信息进行存储、查询、修改和删除操作。

请设计一个合适的数据结构和算法来实现这个学生信息管理系统。

二、设计思路1. 定义学生信息结构体首先,我们需要定义一个学生信息结构体,用来存储一个学生的基本信息,包括学号、姓名、年龄、性别等。

可以使用C语言中的结构体来实现,如下所示:```ctypedef struct{int id; // 学号char name[20]; // 姓名int age; // 年龄char gender[5]; // 性别} Student;```2. 学生信息存储和管理接下来,我们可以使用数组来存储学生信息。

可以定义一个全局数组来存储所有学生的信息,数组的每个元素都是一个学生信息结构体,数组的大小可以根据实际情况设定,这里假设最多存储100个学生的信息,代码如下:```c#define MAX_STUDENTS 100Student students[MAX_STUDENTS]; // 数组存储学生信息int numStudents = 0; // 学生数量```3. 学生信息操作函数接下来,我们可以定义一些函数来实现对学生信息的增删改查操作。

以下是几个常用操作的函数原型:```c// 添加学生信息void addStudent(Student s);// 根据学号查找学生信息Student* findStudentById(int id);// 修改学生信息void updateStudent(Student* s, char name[], int age, char gender[]);// 删除学生信息void deleteStudent(Student* s);// 输出所有学生信息void printAllStudents();```4. 学生信息操作函数的实现我们可以实现上述函数,具体实现细节如下所示:```cvoid addStudent(Student s) {if (numStudents < MAX_STUDENTS) {students[numStudents++] = s;} else {printf("学生信息已满,无法添加新学生!\n"); }}Student* findStudentById(int id) {for (int i = 0; i < numStudents; i++) {if (students[i].id == id) {return &students[i];}return NULL;}void updateStudent(Student* s, char name[], int age, char gender[]) { strcpy(s->name, name);s->age = age;strcpy(s->gender, gender);printf("学生信息修改成功!\n");}void deleteStudent(Student* s) {for (int i = 0; i < numStudents; i++) {if (&students[i] == s) {for (int j = i; j < numStudents - 1; j++) {students[j] = students[j + 1];}numStudents--;printf("学生信息删除成功!\n");return;}printf("未找到该学生信息!\n");}void printAllStudents() {printf("学生信息列表:\n");for (int i = 0; i < numStudents; i++) {printf("学号:%d 姓名:%s 年龄:%d 性别:%s\n", students[i].id, students[i].name, students[i].age, students[i].gender);}}```三、示例程序下面是一个简单的示例程序,演示了如何调用上述函数来实现学生信息的增删改查操作。

c语言程序设计上机题

c语言程序设计上机题

c语言程序设计上机题C语言程序设计是一门实践性很强的课程,上机实践是学习C语言不可或缺的一部分。

下面,我将提供一些常见的C语言上机题目,以帮助学生加深对C语言编程的理解。

1. 基本数据类型和运算符编写一个C程序,实现以下功能:- 声明不同的基本数据类型变量(整型、浮点型、字符型)。

- 对这些变量进行基本的算术运算(加、减、乘、除)。

- 输出运算结果。

2. 条件语句编写一个C程序,使用条件语句(if、else if、else)实现以下功能:- 输入一个成绩,根据成绩判断等级(A、B、C、D、F)。

- 输出对应的成绩等级。

3. 循环语句编写一个C程序,使用循环语句(for、while、do-while)实现以下功能:- 输出1到100之间的所有奇数。

- 使用while循环实现1到100的累加求和。

4. 数组和字符串编写一个C程序,使用数组和字符串实现以下功能:- 声明一个整型数组,输入10个整数,找出最大值和最小值。

- 声明一个字符数组,输入一个字符串,统计字符串中每个字符出现的次数。

5. 函数编写一个C程序,使用函数实现以下功能:- 定义一个函数,实现两个整数的交换。

- 定义一个函数,计算一个整数的阶乘。

- 在主函数中调用这些函数,并输出结果。

6. 指针编写一个C程序,使用指针实现以下功能:- 声明一个整型数组和对应的指针,通过指针访问数组元素。

- 使用指针实现一个函数,交换两个变量的值。

7. 结构体编写一个C程序,使用结构体实现以下功能:- 定义一个学生结构体,包含学号、姓名、年龄和成绩。

- 输入5个学生的信息,存储在结构体数组中。

- 输出每个学生的信息。

8. 文件操作编写一个C程序,使用文件操作实现以下功能:- 创建一个文本文件,向文件中写入数据。

- 从文件中读取数据,并在屏幕上显示。

9. 排序算法编写一个C程序,实现冒泡排序算法,对一个整数数组进行排序。

10. 递归编写一个C程序,使用递归实现以下功能:- 计算阶乘。

数据结构上机题

数据结构上机题

层次遍历#include "stdio.h"#include"alloc.h"#define MAX 61struct node{int data;struct node *lc,*rc;};typedef struct node NODE;NODE *nar[MAX];NODE *setuptree(NODE *t){NODE *p;int x;int f,i,j,n;printf("Shuru jiedian shu:");scanf("%d",&n);printf("shuru xuhao he shuju yu de zhi:");for(i=1;i<=n;i++){scanf("%d %d",&j,&x); xuhao,zhi p=(NODE *)malloc(sizeof(NODE));p->lc=NULL;p->rc=NULL;p->data=x;nar[j]=p;if(j==1)t=p;else{f=j/2;if(j%2==0)nar[f]->lc=p;elsenar[f]->rc=p;}}return(t);}void levelorder(NODE *p){NODE *q,*r; int front,rear;enum{false,true}finish;NODE *s[MAX];front=rear=-1;q=p;if(q!=NULL)s[++rear]=q; chudui while(front!=rear){q=s[++front];printf("%d ",q->data);if(q->lc!=NULL)s[++rear]=q->lc; rudui if(q->rc!=NULL)s[++rear]=q->rc; rudui }}main(){NODE *root=NULL;root=setuptree(root);levelorder(root);}#define MAX 100int sqdelete(int v[],int *pn,int i){int j;for(j=i;j<*pn;j++)v[j]=v[j+1];(*pn)--;return(0);}线性表1void delsame(int v[],int *pn){int i,j,k;i=1;while(i<(*pn)){j=i+1;while(j<=(*pn)){if(v[i]==v[j]){k=sqdelete(v,pn,j);j--;}j++;}i++;}}main(){int v[MAX],n=0,i=1,x;scanf("%d",&x);while(x!=-32768){v[i]=x;n++;i++;scanf("%d",&x);}for(i=1;i<=n;i++)printf("%d ",v[i]);printf("\n");delsame(v,&n);for(i=1;i<=n;i++)printf("%d ",v[i]);printf("\n");}前序遍历#include "stdio.h"#include "alloc.h"#define MAX 61struct node{int data;struct node *lc,*rc;};typedef struct node NODE;NODE *nar[MAX];NODE *setuptree(NODE *t){NODE *p;int x;int f,i,j,n;printf("Shuru jiedian shu:");scanf("%d",&n);printf("shuru xuhao he shuju yu de zhi:"); for(i=1;i<=n;i++){scanf("%d %d",&j,&x);p=(NODE *)malloc(sizeof(NODE));p->lc=NULL;p->rc=NULL;p->data=x;nar[j]=p;if(j==1)t=p;else{f=j/2;if(j%2==0)nar[f]->lc=p;elsenar[f]->rc=p;}}return(t);}void preorder(NODE *p){NODE *q; int top;enum{false,true}finish;NODE *s[MAX];top=-1;q=p;finish=false;doif(q!=NULL){printf("%d ",q->data);top++;s[top]=q;q=q->lc;}elseif(top ==-1)finish=true;else{q=s[top--];q=q->rc;}while(finish==false);}main(){NODE *root=NULL;root=setuptree(root);preorder(root);}SEARCHAR(3.2) #include "stdio.h"#define STRINGMAX 81struct str{int len;char ch[STRINGMAX];};typedef struct str STRING;void searchchar(STRING *a,STRING *b) {int i,j,k;for(i=1;i<=(*a).len;i++){for(k=1;k<i;k++)if((*a).ch[i]==(*a).ch[k])break;if(i==k){for(j=1;j<=(*b).len;j++)if((*a).ch[i]==(*b).ch[j])break;if(j>(*b).len)printf("%c[%d],",(*a).ch[i],i);}}printf("\n");}main(){STRING a,b;char c;int i=1;a.len=0;b.len=0;while((c=getchar())!='#'){a.ch[i]=c;(a.len)++;i++;}a.ch[i]='\0';i=0;while((c=getchar())!='#'){b.ch[i]=c;(b.len)++;i++;}b.ch[i]='\0';searchchar(&a,&b);}TRANS(3)#include "stdio.h"struct node{int data;struct node *next;};typedef struct node NODE;NODE *inlink(NODE *head,int a) {NODE *p,*q,*s;s=(NODE *)malloc(sizeof(NODE)); s->data=a;if(head==NULL){head=s;s->next=NULL;}else{s->next=head;head=s;}return(head);}void print(NODE *head) {NODE *p;p=head;while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}NODE *trans1(NODE *top1) {NODE *top2=NULL,*p;p=top1;top1=top1->next;while(p!=NULL){p->next=top2;top2=p;p=top1;top1=top1->next;}return(top2);}main(){int x;NODE *head=NULL;scanf("%d",&x);while(x!=-32768){head=inlink(head,x);scanf("%d",&x);}print(head);head=trans1(head);print(head);}JOSEPHU(4 )void jsphlist(int v[],int n,int m,int i){int j,n1,m1;j=i;n1=0;m1=0;while(n1<n){if(v[j]!=0){m1++;if(m1==m){v[j]=0;printf("%d ",j);n1++;m1=0;}}if(j==n)j=1;elsej++;}printf("\n");}main(){int v[20],i,n,m;for(i=1;i<20;i++)v[i]=1;printf("input n(<=19),m(<n),i(1<=i<=n):"); scanf("%d%d%d",&n,&m,&i);jsphlist(v,n,m,i);JSPHLINK(2)#define NULL 0struct node{int data;struct node *next;};typedef struct node NODE;NODE *madelink(NODE *head,int n) {int i;NODE *p,*q;p=(NODE *)malloc(sizeof(NODE));p->data=1;p->next=NULL;head=p;for(i=2;i<=n;i++){q=p;p=(NODE *)malloc(sizeof(NODE));p->data=1;p->next=NULL;q->next=p;}p->next=head;return(head);}void jsph(NODE *head,int n,int m,int i) {int j,n1,m1;NODE *p;j=1;n1=0;m1=0;p=head;while(j<i){p=p->next;j++;}while(n1<n){if((p->data)!=0){m1++;if(m1==m){(p->data)=0;printf("%d ",j);n1++;m1=0;}}if((p->next)==head)j=1;elsej++;p=p->next;}printf("\n");}main(){int i,n,m;NODE *p,*head=NULL;printf("input n(<=19),m(<n),i(1<=i<=n):"); scanf("%d%d%d",&n,&m,&i);head=madelink(head,n);jsph(head,n,m,i);}。

数据结构上机实验程序

数据结构上机实验程序

链栈#include<iostream.h>#include<stdlib.h>typedef int ElemType;struct SNode{ElemType data;SNode* next;};void InitStack(SNode*& HS){HS=NULL;//将栈置空}void Push(SNode*& HS,const ElemType& item) {//为插入元素获取动态结点SNode* newptr=new SNode;//给新分配的结点赋值newptr->data=item;//向栈顶插入新结点newptr->next=HS;HS=newptr;}ElemType Pop(SNode*& HS){if(HS==NULL){cerr<<"Linked stack is empty!"<<endl;exit(1);}SNode*p=HS;HS=HS->next;ElemType temp=p->data;delete p;return temp;}ElemType Peek(SNode* HS){if(HS==NULL){cerr<<"Linked stack is empty!"<<endl;exit(1);}return HS->data;//返回栈顶结点的值}bool EmptyStack(SNode* HS){return HS==NULL;}void ClearStack(SNode*& HS){SNode *cp,*np;cp=HS;//给cp指针赋初值,使之指向栈顶结点while(cp!=NULL){//从栈顶到栈底依次删除每个结点np=cp->next;delete cp;cp=np;}HS=NULL;}void main(){SNode* a;InitStack(a);int x;cin>>x;while(x!=-1){Push(a,x);cin>>x;}while(!EmptyStack(a))//栈不为空时依次退栈打印出来cout<<Pop(a)<<" ";cout<<endl;ClearStack(a);}顺序栈#include<iostream.h>#include<stdlib.h>typedef int ElemType;struct Stack{ElemType *stack;int top;int MaxSize;};void InitStack(Stack& S){//初始设置栈空间大小为10个元素位置S.MaxSize=10;//动态空间分配,若分配失败侧退出运行S.stack=new ElemType[S.MaxSize];if(!S.stack){cerr<<"动态存储分配失败!"<<endl;exit(1);}S.top=-1;}void Push(Stack& S,ElemType item){if(S.top==S.MaxSize-1){int k=sizeof(ElemType);S.stack=(ElemType*)realloc(S.stack,2*S.MaxSize*k);S.MaxSize=2*S.MaxSize;}//栈顶指针后移一个位置S.top++;//新元素插入栈顶S.stack[S.top]=item;}ElemType Pop(Stack& S){//若栈空则退出运行if(S.top==-1){cerr<<"Stack is empty!"<<endl;exit(1);}//栈顶指针减1表示退栈S.top--;//返回原栈顶元素的值return S.stack[S.top+1];}ElemType Peek(Stack& S){if(S.top==-1){cerr<<"Stack is empty!"<<endl;exit(1);}return S.stack[S.top];}bool EmptyStack(Stack& S){return S.top==-1;}void ClearStack(Stack& S){if(S.stack){delete []S.stack;S.stack=0;}S.top=-1;S.MaxSize=0;}void main(){Stack s;InitStack(s);int a[8]={4,5,6,20,42,30,58,65};int i;for(i=0;i<8;i++) Push(s,a[i]);cout<<Pop(s);cout<<' '<<Pop(s)<<endl;Push(s,60);cout<<Peek(s);cout<<' '<<Pop(s)<<endl;while(!EmptyStack(s)) cout<<Pop(s)<<' ';cout<<endl;ClearStack(s);}栈的应用----运算#include<iostream.h>#include<stdlib.h>typedef char ElemType;struct Stack{ElemType *stack;int top;int MaxSize;};void InitStack(Stack& S){//初始设置栈空间大小为10个元素位置S.MaxSize=10;//动态存储空间分配,若分配失败则退出运行S.stack=new ElemType[S.MaxSize];if(!S.stack){cerr<<"动态存储分配失败!"<<endl;exit(1);}S.top=-1;}void Push(Stack& S,ElemType item){//若栈空间用完则自动扩大2倍空间,原有栈内容不变if(S.top==S.MaxSize-1){int k=sizeof(ElemType);S.stack=(ElemType*)realloc(S.stack,2*S.MaxSize*k);S.MaxSize=2*S.MaxSize;}S.top++;S.stack[S.top]=item;}ElemType Pop(Stack& S){if(S.top==-1){cerr<<"Stack is empty!"<<endl;exit(1);}S.top--;return S.stack[S.top+1];}ElemType Peek(Stack& S){if(S.top==-1)cerr<<"Stack is empty!"<<endl;exit(1);}return S.stack[S.top];}bool EmptyStack(Stack& S){return S.top==-1;}void ClearStack(Stack& S){if(S.stack){delete[]S.stack;S.stack=0;}S.top=-1;S.MaxSize=0;}int Precedence(char op){switch(op){case '+':case '-':return 1;case '*':case '/':return 2;case '(':case '@':default:return 0;}}void Change(char*S1,char*S2){Stack R;InitStack(R);Push(R,'@');int i=0,j=0;char ch=S1[i];while(ch!='\0')if(ch==' ') ch=S1[++i];else if(ch=='('){Push(R,ch); ch=S1[++i];}else if(ch==')'){while(Peek(R)!='(') S2[j++]=Pop(R);Pop(R);ch=S1[++i];}else if(ch=='+'||ch=='-'||ch=='*'||ch=='/'){char w=Peek(R);while(Precedence(w)>=Precedence(ch)){S2[j++]=w;Pop(R);w=Peek(R);}Push(R,ch);ch=S1[++i];}else{if((ch<'0'||ch>'9')&& ch!='.'){cout<<"中缀表达式错误!"<<endl;exit(1);}while((ch>='0'&&ch<='9')||ch=='.'){S2[j++]=ch;ch=S1[++i];}S2[j++]=' ';}}ch=Pop(R);while(ch!='@'){if(ch=='('){cerr<<"expression error!"<<endl;exit(1);}else{S2[j++]=ch;ch=Pop(R);}}S2[j++]='\0';}void main(){char a[30];char b[30];cout<<"请输入一个中缀算术表达式:"<<endl;cin.getline(a,sizeof(a));Change(a,b);cout<<"对应的后缀算术表达式: "<<endl;cout<<b<<endl;}。

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

5
2
{ p=p->next; j++; } return j; } Lnode * Get_LinkList(LinkList L,int a) /*带头结点的单链表输出位序为 a 元素*/ { Lnode * p=L; int j=-1; while(p->next!=NULL && j<a) { p=p->next; j++;} if(j==a) return p; else return NULL; } int Locate_LinkList(LinkList L,int x) /*带头结点的单链表找到值为 x 的结点*/ { int j=0; Lnode * p=L->next; while(p!=NULL&&p->data!=x) { p=p->next; j++;} if (p->data==x) return j; else return 0; } void Insert_LinkList(LinkList L,int b,int x)/*插入新结点*/ { Lnode * p,*s; p=Get_LinkList(L,b-1); if(p==NULL) { printf("参数错误"); } else { s=(LinkList)malloc(sizeof(Lnode)); s-&g后的链表为:\n"); p=L->next->next; for( i=0;i<NewL;i++)/* */ { printf("%d\n",p->data); p=p->next; } printf("6.请输入一个位序值 m 和 n:\n"); scanf("%d%d",&m,&n); Del_LinkList( L,m); Del_LinkList( L,n); NewL=Length_LinkList(L);/* */ printf("链表新长度为%d\n",NewL); p=L->next; for(i=0;i<NewL;i++)/* */ { p=p->next; printf("%d\n",p->data); } } LinkList Creat_List() /*带头结点的单链表尾插法创建链表*/ { LinkList L; Lnode * R; L= (LinkList)malloc(sizeof(Lnode)); L->next=NULL; int x; R=L; while(x!=-1) { R->next=(LinkList)malloc(sizeof(Lnode)); R->next->data=x; R=R->next; printf("请输入数据\n"); scanf("%d",&x); } R->next=NULL; return L; } int Length_LinkList(LinkList L) /*带头结点的单链表的长度*/ { Lnode * p=L; int j=-1; while(p->next)
# include <stdio.h> # include <malloc.h> typedef struct node { int data; struct node * next; } Lnode ,* LinkList; void main() { int Length,a,x,w,b,NewL,m ,n; Lnode * L,* W,*p,*l; LinkList Creat_List(); int Length_LinkList(LinkList L); Lnode * Get_LinkList(LinkList L,int a); int Locate_LinkList(LinkList L,int x); void Insert_LinkList(LinkList L,int b,int x); void Del_LinkList(LinkList L,int i); LinkList Creat_LinkList1(LinkList L); L=Creat_List(); printf("7.将链表倒置后为:\n"); l=Creat_LinkList1(L); NewL=Length_LinkList(l); p=l->next; for(int i=0;i<=NewL;i++)/* */ { printf("%d\n",p->data); p=p->next; } Length=Length_LinkList(L); printf("2.链表长度为%d\n",Length); printf("3.请输入一个位序值 a:\n"); scanf("%d",&a); W=Get_LinkList( L,a); printf("%d\n",W->data); printf("4.请输入元素 x 的值:\n"); scanf("%d",&x); w=Locate_LinkList( L,x); printf("%d\n",w); printf("5.请输入一个位序值 b:\n"); scanf("%d",&b); Insert_LinkList( L,b,500); NewL=Length_LinkList(L);/* */ printf("插入元素后的链表新长度为%d\n",NewL);
4
# include <stdio.h> # include <math.h> void main() { int n,i; void primenum(int n); printf("请输入一个整数\n"); scanf("%d", &n); for(i=n;i>1;i--) primenum(i); } void primenum(int n) { int j,k,cont; k=sqrt(n); for(j=2;j<=k;j++) if(n%j==0) break; if(j>k) printf("%d\n",n); }
3
s->next=p->next; p->next=s; } } void Del_LinkList(LinkList L,int i) { Lnode *p,*s; p=Get_LinkList( L,i);/* */ if(p==NULL) { printf("第个结点不存在"); } else if(p->next==NULL) { printf("第个结点不存在"); } else { s=p->next; p->next=s->next; free(s); } } LinkList Creat_LinkList1(LinkList L)/*将链表倒置*/ { LinkList l; Lnode * s,* p; int x,Length; Length=Length_LinkList(L); l=(LinkList)malloc(sizeof(Lnode)); l->next=NULL; p=L->next; for(int i=0;i<Length;i++)/* */ { p=p->next; x=p->data; s=(LinkList)malloc(sizeof(Lnode)); s->data=x; s->next=l->next; l->next=s; } return l; }
相关文档
最新文档