当前位置:文档之家› 数据结构实验答案

数据结构实验答案

重庆文理学院软件工程学院实验报告册专业:_____软件工程__ _班级:_____软件工程2班__ _学号:_____2 ___姓名:_____周贵宇___________课程名称:___ 数据结构 _指导教师:_____胡章平__________2013年 06 月 25 日{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/}SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);void main(){ SeqList *l;int p,q,r;int i;l=(SeqList*)malloc(sizeof(SeqList));printf("请输入线性表的长度:");scanf("%d",&r);l->last = r-1;printf("请输入线性表的各元素值:\n");for(i=0; i<=l->last; i++){scanf("%d",&l->elem[i]);}px(l,i);printf("请输入要插入的值:\n");scanf("%d",&l->elem[i]);i++;px(l,i);l->last++;for(i=0; i<=l->last; i++){ printf("%d ",l->elem[i]);}printf("\n");}void px(SeqList *A,int j){ int i,temp,k;for(i=0;i<j;i++){ for(k=0;k<j-1;k++){if(A->elem[i]<A->elem[k]){temp=A->elem[i];A->elem[i]=A->elem[k];A->elem[k]=temp;}}}}2.#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/}SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);int DelList(SeqList *L,int i,SeqList *e,int j)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。

i 的合法取值为1≤i≤st+1 */{ int k,a,b,c;if((i<1)||(i>L->last+2)){ printf("删除位置不合法!");return(ERROR);}if(j>L->last-i){ printf("删除位置不合法!");return(ERROR);}for(b=0,a=i-1;a<i+j-1;b++,a++){ e->elem[b]=L->elem[a];}e->last=b; /* 将删除的元素存放到e所指向的变量中*/for(k=i;k+j-1<=L->last;k++){ L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/L->last=L->last-j;printf("删除的元素值为:");for(c=0;c<b;c++){ printf("%d ",e->elem[c]);}printf("\n");return(OK);}void main(){ SeqList *l,*q;int p,r;int i,j,m;l = (SeqList*)malloc(sizeof(SeqList));q = (SeqList*)malloc(sizeof(SeqList));printf("请输入线性表的长度:");scanf("%d",&r);l->last = r-1;printf("请输入线性表的各元素值:\n");for(i=0; i<=l->last; i++){ scanf("%d",&l->elem[i]);}px(l,i);for(i=0;i<=r-1;i++){printf("%d ",l->elem[i]);}printf("\n");printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j);m=DelList(l,p,q,j);if(m==0){printf("无法删除");exit(0);}else if(m==1){ printf("线性表内余下元素为:\n");for(i=0;i<=r-j-1;i++){printf("%d ",l->elem[i]);}printf("\n");}}void px(SeqList *A,int j){ int i,temp,k;for(i=0;i<j;i++){ for(k=0;k<j-1;k++){if(A->elem[i]<A->elem[k]){temp=A->elem[i];A->elem[i]=A->elem[k];A->elem[k]=temp;}}}printf("排序完成!");}3.#include <stdio.h>#include <stdlib.h>#include <string.h>/*#define ElemType char*/typedef struct Node /*结点类型定义*/{ int num;char name[10];int age;struct Node * next;}Node, *LinkList; /* LinkList为结构指针类型*/LinkList CreateFromTail()/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/{ LinkList L;Node *r, *s;int a;char b[10];int c;int flag =1; /*设置一个标志,初值为1,当输入"-1"时,flag 为0,建表结束*/L=(Node * )malloc(sizeof(Node));L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*//*循环输入表中元素值,将建立新结点s插入表尾*/printf("输入学生的信息:\n");printf("学号姓名年龄\n");while(flag){ scanf("%d",&a);if(a==-1)flag=0;else{ scanf("%s%d",b,&c);s=(Node*)malloc(sizeof(Node));s->num=a;strcpy(s->name,b);s->age=c;r->next=s;r=s;}} r->next=NULL;return L;}void ReverseList(LinkList L){ Node *p,*q;p=L->next;L->next=NULL;while(p!=NULL){ q=p->next; /*q指针保留p->next得值*/ p->next=L->next;L->next=p; /*将p结点头插入到单链表L中*/p=q; /*p指向下一个要插入的结点*/ }}void main(){ LinkList l;Node *p;printf("请输入链表数据,以-1结束!\n");l = CreateFromTail();printf("输入的单链表为:\n");p = l->next;while(p!=NULL){ printf("%d %s %d\n",p->num,p->name,p->age);p=p->next;}ReverseList(l);printf("逆置后的单链表为:\n");p = l->next;while(p!=NULL){ printf("%d %s %d\n",p->num,p->name,p->age);实验内容1.利用栈的运算实现数制转换—--分别将十进制转换为八进制和十六进制。

2.编程判断一个字符序列是否是回文序列。

输入形式为“*****#*****”,*为输入的字符,#为两序列的分隔符。

3.实现链队列管理---输入一个整数,如果是奇数就入队,如果是偶数就让队头出队,直到输入0就结束,最后输出队列的所有元素。

实验过程及步骤(代码)1.#include<stdio.h>#include<malloc.h>#include<windows.h>#define NULL 0typedef struct Number{int num;struct Number *next;}Num;void Conversion(int iNum,int i); //转换数字,进栈,iNum 为待转换的数,i代表进制void Pop(struct Number *top,int i); //显示结果,出栈,top 为栈顶指针,i代表进制void main(){int m=8,n=2,j=16;int iNum;char choose,c;printf("数制转换\n\n");printf("请输入一个十进制数: ");scanf("%d",&iNum);printf("转换后结果为:\n");printf("\n八进制:");Conversion(iNum,m);printf("十六进制:");Conversion(iNum,j);printf("\n转换完毕!\n");}void Conversion(int iNum,int i) //进栈{struct Number *top=NULL,*NewP;while(iNum!=0){NewP=(struct Number *)malloc(sizeof(struct Number));if(top==NULL){NewP->next=NULL;top=NewP;top->num=iNum%i;}else{NewP->next=top;top=NewP;top->num=iNum%i;}iNum=iNum/i;}//whilePop(top,i);printf("\n");}void Pop(struct Number *top,int i) //出栈{ if(top==NULL)printf("栈空!\n");else{ char cell[]="0123456789ABCDEF";struct Number *temp,*q;switch(i){ case 8: //输出八进制case 16: //输出十六进制{temp=top;while(temp!=NULL){printf("%c",cell[temp->num]);q=temp;temp=temp->next;free(q);}break;}}//switch}//else}2.#include <stdio.h>#include <string.h>#include <conio.h>int huiWen(const char *p);int main(){ char test[225];printf("请输入序列:\n");gets(test);if(huiWen(test)){ printf("是回文!\n"); }else { printf("不是回文!\n"); }getch(); return 0;}int huiWen(const char *p){ int i=0,n=strlen(p);while(p[i]==p[n-i-1] && i<n-i-1) //只要相等且还未相遇则继续循环{ i++; }return ((i<n-i-1)? 0:1);} //若i<n-i-1表示中途遇到不相等的字符而退出循环3.#define TRUE 1#define FALSE 0#define MAXSIZE 50 /*队列的最大长度*/typedef struct{ int element[MAXSIZE]; /* 队列的元素空间*/int front; /*头指针指示器*/int rear; /*尾指针指示器*/}SeqQueue;/*初始化操作*/void InitQueue(SeqQueue *Q){ /* 将*Q初始化为一个空的循环队列*/Q->front=Q->rear=0;}/*入队操作*/int EnterQueue(SeqQueue *Q, int x){/*将元素x入队*/if((Q->rear+1)%MAXSIZE==Q->front) /*队列已经满了*/return(FALSE);Q->element[Q->rear]=x;Q->rear=(Q->rear+1)%MAXSIZE; /* 重新设置队尾指针*/return(TRUE); /*操作成功*/}/*出队操作*/int DeleteQueue(SeqQueue *Q){ /*删除队列的队头元素,用x返回其值*/if(Q->front==Q->rear) /*队列为空*/return(FALSE);Q->front=(Q->front+1)%MAXSIZE; /*重新设置队头指针*/return(TRUE); /*操作成功*/}int output(SeqQueue *Q){ int x,i=Q->front;/*提取队列的队头元素,用x返回其值*/if(Q->front==Q->rear) /*队列为空*/return(FALSE);while(i!=Q->rear){x=Q->element[i];printf("%d ",x);i++;}return(TRUE); /*操作成功*/}#include "seqqueue1.h"#include<stdio.h>void main(){ int c;SeqQueue Q;InitQueue(&Q);printf("请输入整数:");scanf("%d",&c);while(c!=0){if(c%2==1)EnterQueue(&Q,c);elseDeleteQueue(&Q);printf("请输入整数:");scanf("%d",&c);}output(&Q);}实验结果及分析(每道题的运行结果及分析总结)1.实验结果:实验分析:我测视了两组数据,均正确,证明我的代码没有错误。

相关主题