【www.arisingsemi.com--IT认证】
回文结构数据结构(C语言版) 实验报告
学院 信息工程学院
班级 15计科2班
学号 15131019
姓名 张旭
指导教师 曹晨
实验一 线性表基本操作和简单程序
1. 实验目的
(1)复习Visual C++ 6.0上机调试程序的基本方法及C语言编程;
(2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在链表存储结构上的程序设计方法。
2. 实验要求
(1) 认真阅读和掌握和本实验相关的教材内容。
(2) 分别以头插法和尾插法建立两个数据域定义为整型的升序单链表,再将这两个有序链表合并成一个新的无重复元素的有序链表,最后可以根据输入的数据,先找到相应的结点,后删除之。
(3) 上机运行程序。
(4) 保存和打印出程序的运行结果,并结合程序进行分析。
3. 程序代码
#include
#include
typedef struct node{
int data;
struct node *next;
}node;
node * qbuild(node *first)
{
int i,n,a[100];
node *s;
printf("输入n:");
scanf("%d",&n);
first=(node*)malloc(sizeof(node));
first->next=NULL;
for(i=0;idata=a[i];
s->next=first->next;
first->next=s;
}
return first;
}
node * hbuild(node *first)
{
int i,n,a[100];
struct node *s,*r;
printf("输入n:");
scanf("%d",&n);
first=(node*)malloc(sizeof(node));
r=first;
for(i=0;idata=a[i];
r->next=s;
r=s;
}
r->next=NULL;
return first;
}
node * hebing(node *La,node *Lb)
{
node *pa,*pb,*pc,*Lc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa && pb)
{
if(pa->data < pb->data){
pc->next =pa;
pc=pa;
pa=pa->next
}
else if(pa->data > pb->data){
pc->next =pb;
pc=pb;
pb=pb->next;
}
else{
pc->next =pa;
pc=pa;
pa=pa->next
pb=pb->next
}
}
pc->next =pa?pa:pb;
free(Lb);
return Lc;
}
node * shanchu(node *first,int i)
{
node *p,*q;
p=first->next;
while(p)
{
if((p->next )->data==i)
{
q=p->next
p->next =q->next;
free(q);
break;
}
p=p->next;
}
return first;
}
void display(node *first)
{
struct node *p;
p=first->next;
while(p。
=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int m;
struct node *a,*b,*c;
a=qbuild(a);
printf("打印链表a:");
display(a);
b=hbuild(b);
printf("打印链表b:");
display(b);
c=hebing(a,b);
printf("打印链表c:");
display(c);
printf("输入删除的数m:");
scanf("%d",&m);
c=shanchu(c,m);
printf("打印删除后的链表c:");
display(c);
return 0;
}
4. 实验结果
输入n:5
输入a[0]:9
输入a[1]:5
输入a[2]:4
输入a[3]:3
输入a[4]:1
打印链表a:1 3 4 5 9
输入n:5
输入a[0]:1
输入a[1]:3
输入a[2]:4
输入a[3]:6
输入a[4]:8
打印链表b:1 3 4 6 8
打印链表c:1 3 4 5 6 8 9
输入删除的数m:5
打印删除后的链表c:1 3 4 6 8 9
--------------------------------
Process exited after 32.78 seconds with return value 0
请按任意键继续. . .
5. 心得体会
本次实验是以后实验的基础,是数据结构中最基本的东西。通过本次试验,我对之前所学习的C语言知识要点有了进一步实践,加深了我对C语言的认识。
实验二 利用栈和队列判断字符串是否是回文
1. 实验目的
(1)深入了解栈和循环队列的特性、栈和递归程序设计的关系。
(2)要求能灵活运用两种结构来解决有关的应用问题。y
2. 实验要求
(1) 认真阅读和掌握和本实验相关的教材内容。
(3) 上机运行程序。
(4) 保存和打印出程序的运行结果,并结合程序进行分析。
3. 程序代码
#include
#include
#define m 100
typedef struct //定义栈
{
char data[m];
int top;
}zhan;
void cshz(zhan *s) //初始化栈
{
s->top=0;
}
int pdzk(zhan *s) //判断栈是否为空
{
if(s->top==0)
{
return 0;
}
else
{
return 1;
}
}
void ruzhan(zhan *s,char x) //入栈
{
if(s->top==m)
{
printf("栈空\n");
}
else
{
s->data[++s->top]=x;
}
}
char chuzhan(zhan *s) //出栈
{
char y;
if(s->top==0)
{
printf("栈空\n");
return "0";
}
else
{
y=s->data[s->top];
s->top=s->top-1;
return y;
}
}
typedef struct { //定义队列
char data[m];
int front;
int rear;
}dui;
void cshdl(dui *q) //初始化队列
{
q->front=q->rear=0;
}
void rudui(dui *q,char e) //入队
{
if((q->rear+1)%m==q->front)
{
printf("队列为空\n");
}
else
{
q->data[q->rear]=e;
q->rear=(q->rear+1);
}
}
char chudui(dui *q) //出对。