码迷,mamicode.com
首页 > 其他好文 > 详细

第二次签到 先来个单链表

时间:2019-05-06 22:03:56      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:ret   turn   amp   --   void   stdio.h   std   个数   头插法   

#include<stdio.h>
#include<stdlib.h>
typedef int Data;
typedef struct st
{
Data data;
struct st *next;
}Link;
int i=0;
void menu()
{
printf("----------------------\n");
printf("0.退出 \n");
printf("1.初始化链表(带头)\n");
printf("2.清空链表\n");
printf("3.表长\n");
printf("4.头插法 \n");
printf("5.尾插法 \n");
printf("6.插入 \n");
printf("7.删除 \n");
printf("8.遍历 \n");
printf("----------------------\n");
}

void csh(Link* &L)//初始化
{
L=(Link*)malloc(sizeof(Link));
L->next=NULL;
}

void qk(Link* &L )//清空
{
Link *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;q=q->next;
i--;
}
free(p);
}

void bc(Link* L)//表长
{
int i=0;
Link *p=L->next;
while(p)
{
i++;
p=p->next;
}
printf("表长为:%d",i);
}

void tc(Link* L)//头插法
{
Link *p,*m;
p=L;
if(p==NULL) return;
printf("输入-1退出\n");
while(1)
{
m=(Link*)malloc(sizeof(Link));
printf("请输入第%d个数\n",i+++1);
scanf("%d",&m->data);
if(m->data!=-1)
{
m->next=p->next;
p->next=m;
}
else return;
}
--i;
}

void wc(Link *L)//尾插
{
Link *p,*m;
p=L;
if(p==NULL) return;
while(p->next!=NULL)
p=p->next;
printf("输入-1退出\n");
while(1)
{
m=(Link*)malloc(sizeof(Link));
printf("请输入第%d个数\n",i+++1);
scanf("%d",&m->data);
if(m->data!=-1)
{
p->next=m;
p=m;
}
else
{
p->next=NULL;
--i;
return;
}
}

}

void cr(Link *L)//插入
{
Link *p=L->next,*m;
int js=0,j;
m=(Link*)malloc(sizeof(Link));
printf("输入要插入的位置:");
scanf("%d",&j);
printf("输入要插入的数据:");
scanf("%d",&m->data);
while(js<j)
{
p=p->next;
js++;
}
m->next=p->next;
p->next=m;
++i;
}

void sc(Link *L)//删除
{
Link *p,*q;
int x;
p=L->next;
printf("请输入要删除的数:\n");
scanf("%d",&x);
while(p->data!=x)
{
q=p;
p=p->next;
}
q->next=p->next;
--i;
}
void bl(Link *L) //遍历
{
Link *p=L->next;
printf("链表为:\n");
while(p)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
main()
{
Link *L;
int xh;
menu();
printf("请输入序号:\n");
scanf("%d",&xh);
while(1)
{
switch(xh)
{
case 0:return 0;
case 1:csh(L);break;
case 2:qk(L);break;
case 3:bc(L);break;
case 4:tc(L);break;
case 5:wc(L);break;
case 6:cr(L);break;
case 7:sc(L);break;
case 8:bl(L);break;
default:
{
printf("请重新输入!\n");
scanf("%d",&xh);
continue;
}
}
menu();
printf("请输入序号:\n");
scanf("%d",&xh);
}
}

第二次签到 先来个单链表

标签:ret   turn   amp   --   void   stdio.h   std   个数   头插法   

原文地址:https://www.cnblogs.com/Qinghua99/p/10822372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!