栈和队列实验报告

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

实验三:栈和队列

程序代码:

(1):栈

#include

#include

typedef struct node

{

int data;

struct node *next;

}node_type;

void pushs(node_type **top)

{

int x;

int i=0;

node_type *p;

printf("Enter some numbers end by 0\n");

scanf("%d",&x);

while(x!=0)

{

p=(node_type*)malloc(sizeof(node_type));

p->data=x;

if(i=0)

{

p->next=NULL;

(*top)=p;

i++;

}

else

{

p->next=(*top);

(*top)=p;

}

scanf("%d",&x);

}

}

void printlst(node_type **top)

{

node_type *p;

p=(*top);

if(p==NULL)

{

printf("There is no bumber\n");

return;

}

printf("The remaining numbers are:\n");

while(p!=NULL)

{

printf("%4d",p->data);

p=p->next;

}

}

int pops(node_type **top)

{

node_type *p;

int x;

if((*top)==NULL)

{

printf("error\n");

return 0;

}

else

{

x=(*top)->data;

printf("\n%d\n",x);

p=(*top);

(*top)=(*top)->next;

return(x);

free(p);

}

}

void main()

{

node_type *h=NULL;

pushs(&h);

printlst(&h);

printf("\nPop a number\n");

pops(&h);

printlst(&h);

printf("\nPop a number\n");

pops(&h);

printlst(&h);

}

(2):队列

#include

#include

#define N 20

typedef struct queue

{ int data[N];

int front, rear;

}queue;

int dequeue(queue *q)

{

if(q->rear==q->front)

return(0);

else

{

q->front=(q->front+1)%N;

return(q->data[q->front]); }

}

int enter(queue *q,int x)

{

if(((q->rear)+1)%N==q->front) return(0);

else

{

q->rear=(q->rear+1)%N;

q->data[q->rear]=x;

return 1;

}

}

void printsl(queue *q)

{

int i;

printf("\nThe numbers are:\n"); i=(q->front+1)%N;

while(i!=(q->rear+1)%N)

{

printf("%4d",q->data[i]);

i=(i+1)%N;

}

printf("\n");

}

void aa(queue *q)

{

int i,j;

int a;

if(q->rear>q->front)

i=q->rear-q->front;

else

i=q->front-q->rear;

for(j=1;j<=i;j++)

{

a=dequeue(q);

if(a>0)

enter(q,a);

}

}

void main()

{

queue *p;

int i;

int a[N]={0,2,3,-4,6,-5,8,-9,7,-10,20};

p=(queue*)malloc(sizeof(queue));

for(i=1;i<=10;i++)

{

p->data[i]=a[i];

}

p->front=0;

p->rear=10;

printsl(p);

aa(p);

printsl(p);

}

典型数据输入:1 2 3 4 0

分析输出:

(1)栈

4 3 2 1

4

3 2 1

3

相关文档
最新文档