您的位置:首页 > 其它

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

2017-11-23 21:32 423 查看
#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

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐