用单向链表输入数据,逆序显示出

来源:互联网 发布:mac怎么关闭桌面 编辑:程序博客网 时间:2024/05/10 04:18
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int datatype;typedef struct linklist{    datatype data;    struct linklist * next;}link_list,*link_plist;void linklist_init(link_plist *H);void linklist_insert(link_plist p,link_plist new);bool linklist_del(link_plist p);bool is_empty_linklist(link_plist p);void linklist_show(link_plist h);void linklist_create(link_plist h);void linklist_sort(link_plist h);int main(void){    link_plist h;    linklist_init(&h);    linklist_create(h);    linklist_sort(h);    return 0;}//初始化,传入指针的指针void linklist_init(link_plist *H){    *H = (link_plist)malloc(sizeof(link_list));    if(*H == NULL)    {        perror("malloc failed");        exit(1);    }    (*H)->next = NULL;//把头结点的next指针赋值为NULL}//插入void linklist_insert(link_plist p,link_plist new){    new->next = p->next;    p->next = new;}//删除p后面的一个节点bool linklist_del(link_plist p){    link_plist t;    if(p->next == NULL)    {        printf("删除失败,表已空\n");        return false;    }    //记住p后面的第一个结点    t = p->next;    //p结点指向t的下一个    p->next = t->next;    //释放t结点,t结点被删除    free(t);    return true;}//判断空bool is_empty_linklist(link_plist p){    if(p->next == NULL)        return true;    else        return false;}//遍历(厉害啊)void linklist_show(link_plist h){    link_plist t;    printf("|_|");    for(t=h->next;t!=NULL;t=t->next)//移动t        printf("---->%d",t->data);    printf("\n");}//创建一个表void linklist_create(link_plist h){    int n,i;    link_plist new,p=h;    printf("你要创建几个数据的表:");    scanf("%d",&n);    for(i=0;i<n;i++)    {        new = (link_plist)malloc(sizeof(link_list));//用malloc动态分配内存        //malloc之后一般要判断是否申请成功        if(NULL == new)        {            perror("malloc failed");//用perror            exit(1);        }        printf("请输入一个数据:");        scanf("%d",&new->data);        //插入        new->next = p->next;        p->next = new;//      linklist_insert(p,new);        p = p->next;//让p始终指向表尾        linklist_show(h);    }}//倒序void linklist_sort(link_plist h){    //将原链表拆分成两个表:一个空表,一个数据表    link_plist p,t;    p=h->next;//数据表    h->next=NULL;//空表    while(p != NULL)    {        t = p;        p = p->next;        linklist_insert(h,t);        linklist_show(h);    }}

/*编译过程
$ ./a.out
你要创建几个数据的表:5
请输入一个数据:1
|_|—->1
请输入一个数据:2
|_|—->1—->2
请输入一个数据:3
|_|—->1—->2—->3
请输入一个数据:4
|_|—->1—->2—->3—->4
请输入一个数据:5
|_|—->1—->2—->3—->4—->5
|_|—->1
|_|—->2—->1
|_|—->3—->2—->1
|_|—->4—->3—->2—->1
|_|—->5—->4—->3—->2—->1

*/

原创粉丝点击