#include <stdio.h>
#include <malloc.h>
#include <dos.h>
typedef struct ABC
{
int a;
struct ABC * next;
}ST,*pST;
int x;
pST create() /*创建*/
{
pST none;
none=(pST)malloc(sizeof(ST));/*分配内存*/
if (none==NULL)
{
printf("memory full");/*为空分配失败*/
sleep(1);
exit (-1); /*退出程序*/
}
else
none->next=NULL;
return none; /*返回节点的地址*/
}
void input(pST none) /*在链表尾部添加一个节点*/
{
extern x; /*x是节点的个数*/
int i=x;
pST pNEW;
while(i--)
none=none->next; /*寻找到最后一个节点*/
pNEW=create();
none->next=pNEW; /*添加*/
printf("please input a number\n");
scanf("%d",&(pNEW->a));
printf(" OK %d",++x);
sleep(1); /*延时1秒*/
return ;
}
void deleted(pST none) /*从末尾删掉一个*/
{
extern x;
pST mm;
int m=x-1;
if(none->next==NULL||x==0) /*不允许是头接点被删*/
printf("delete fail\n");
else
{
while(m--)
none=none->next; /*寻找到倒数第2个节点*/
mm=none->next;
m=mm->a;
free(none->next); /*找到倒数第2个节点后用它释放最后一个节点*/
none->next=NULL;
printf(" delete:%d OK %d\n",m,--x);
}
sleep(1);
return ;
}
void findinput(pST none) /*表内任意位置插入*/
{
extern x;
int i,j;
pST pnew; /*定义一个新节点*/
printf("where input\n");
scanf("%d%d",&i,&j);
/*setbuf(stdin,NULL); */
if (i>x||i<0)
printf("error number\n");
else
{
while(i--)
none=none->next; /*找到那个节点*/
pnew=create();
pnew->next=none->next; /**/
none->next=pnew;
printf("please input a number\n");
/*fflush(stdin);*/
/*i=10;
while(i--)bioskey(1);
scanf("%",&i); */
pnew->a=j;
printf(" OK number%d\n",++x);
}
sleep(1);
return ;
}
void finddelete(pST none) /*表内任意位置删除*/
{
extern x;
pST mmm;
int i;
printf("where delete\n");
scanf("%d",&i); /*得到位置*/
if (i>x||i<1)
printf("error number\n");
else
{
while(--i)
none=none->next; /*找到指定位置的上一个节点*/
i=none->a;
mmm=none->next->next; /*中转一下*/
free(none->next); /*释放它*/
none->next=mmm;
printf("delete:%d OK number%d",i,--x);
}
sleep(1);
return ;
}
void traverse(pST none) /*遍历输出*/
{
extern x;
int i=x; /*基本所有的操作都是根据x来判断的*/
while(i--)
{
none=none->next;
printf("%d ",none->a); /*显示节点的数据*/
}
printf("\n end\n");
sleep(2);
return ;
}
void find(pST none) /*找到表内任意节点的数据*/
{
int i,b;
extern x;
printf("please input a number\n"); /*这里也是个数,不是节点存储的数据*/
scanf("%d",&i);
b=i;
if(i>x||i<1)
printf("error number\n");
else
{
while(i--)
none=none->next;
printf("No.%d is %d\n",b,none->a);
}
sleep(1);
return ;
}
void destroy(pST none) /*销毁除头节点外所有的节点*/
{
extern x;
pST mmm;
none=none->next;
while(none!=NULL)
{
mmm=none; /*还是得中转下*/
none=none->next;
free(mmm);
}
printf("destroy OK\n");
x=0; /*个数置0*/
sleep(1);
return ;
}
int main()
{
int i;
pST pHEAD;
pHEAD=create();
while(1)
{
clrscr();
/*printf("%#X\n",main);*/
printf("1.add\n");
printf("2.sub\n");
printf("3.insert\n");
printf("4.delete \n");
printf("5.traverse\n");
printf("6.find\n");
printf("7.destroy\n");
printf("8.number\n");
printf("ESC exit\n");
i=getch();
if(i==0x1b)free(pHEAD);break; /*ESC退出*/
switch(i)
{
case 0x31:
input(pHEAD);break;
case 0x32:
deleted(pHEAD);break;
case 0x33:
findinput(pHEAD);break;
case 0x34:
finddelete(pHEAD);break;
case 0x35:
traverse(pHEAD);break;
case 0x36:
find(pHEAD);break;
case 0x37:
destroy(pHEAD);break;
case 0x38:
printf(" %d ",x);break;
default:printf("number error!!!\n");
}
}
return 0;
}
- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32