【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)        //出对。

本文来源:http://www.arisingsemi.com/it/141858/