队列和栈的应用、单链表的创建、模拟链表

来源:互联网 发布:买家淘宝怎么发买家秀 编辑:程序博客网 时间:2024/06/08 14:12

队列的应用

有一串数字:6 3 1 7 5 8 9 2 4,解码规则:删除一个,下一个添加到串尾,直到全部删除,然后输出依次被删的顺序。

#include<stdio.h>#define max 20int main(){    int i,len,head,tail,a[max];    printf("input the len:");    scanf("%d",&len);    head=0;    tail=len;    for(i=0;i<len;i++)        scanf("%d",&a[i]);    printf("print the number:");    while(head<tail)    {        printf("%d ",a[head]);        head++;        a[tail]=a[head];        tail++;        head++;    }    return 0;}

栈的应用

利用栈判断字符串是否属于回文序列

#include<stdio.h>#include<string.h>#define max 20int main() {    char a[max],s[max];    int i,len,mid,top,next;    printf("input the str:");    gets(a);    len=strlen(a);    mid=len/2-1;    top=0;    for(i=0;i<=mid;i++)    {        top++;        s[top]=a[i];    }    if(len%2)    next=mid+2;    else next=mid+1;    for(i=next;i<len;i++)    {        if(a[i]!=s[top])        break;        top--;    }    if(top)    printf("it is NO");    else printf("it is YES");    return 0;}

单链表的创建和插入

利用指针创建一个有序单链表,并插入一个数字

#include<stdio.h>#include<stdlib.h>struct node{    int data;    struct node*next;};int main(){    struct node*head,*p,*q,*t;    int i,n,a;    printf("input the n: ");    scanf("%d",&n);    head=NULL;    printf("input the numbers:");    for(i=1;i<=n;i++)    {        scanf("%d",&a);        p=(struct node*)malloc(sizeof(struct node));        p->data=a;        p->next=NULL;        if(head==NULL)            head=p;        else q->next=p;        q=p;    }    printf("input the insert : ");    scanf("%d",&a);    t=head;    while(t!=NULL)    {        if(t->next==NULL||t->next->data>a)        {            p=(struct node*)malloc(sizeof(struct node));            p->data=a;            p->next=t->next;            t->next=p;            break;         }        t=t->next;    }    t=head;    printf("the order:");    while(t!=NULL)    {        printf("%d ",t->data);        t=t->next;    }    return 0; } 

模拟链表

用数组模拟链表,实现插入

#include<stdio.h>#define max 20int main(){    int data[max],right[max];    int i,n,t,len;    printf("input the len:");    scanf("%d",&len);    printf("input the numbers:");    for(i=1;i<=len;i++)    scanf("%d",&data[i]);    for(i=1;i<=len;i++)    {        if(i!=len)        right[i]=i+1;        else right[i]=0;    }    len++;    printf("insert: ");    scanf("%d",&data[len]);    t=1;    while(t!=0)    {        if(data[right[t]]>data[len])        {            right[len]=right[t];            right[t]=len;            break;        }        t=right[t];    }    t=1;    printf("the order:");    while(t)    {        printf("%d ",data[t]);        t=right[t];    }    return 0;}

小结

栈和队列概念不难,链表的创建(头插法)和插入也是建立在指针的基础上,模拟链表名字有些唬人,其实是对数组的进一步运用,所以要加强对概念和基础的掌握。

原创粉丝点击