链表的基本操作
编写一个程序,要求从终端输入一组整数(大于10个数)以0作为
结束标志,将这一组整数存放在一个链表中,打印出该链表中的值,
然后删除链表中的第五个元素,打印出删除后的结果。最后在内存中释放掉该链表
/**编写一个程序,要求从终端输入一组整数(大于10个数)以0作为
结束标志,将这一组整数存放在一个链表中,打印出该链表中的值,
然后删除链表中的第五个元素,打印出删除后的结果。最后在内存中释放掉该链表*/
#include "stdio.h"
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
}LNode,*LinkList;
LinkList creatLinkList(int n)
{
LinkList p,r,list=NULL;
ElemType e;
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&e);
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
if(!list)
list=p; //list 为头指针
else
r->next=p; //r一直指向链表的末尾指针
r=p; //目的是使r再次指向最后一个节点,以便生成链表的下一个节点
}
return list;
}
void insertList(LinkList * list,LinkList q,ElemType e){
LinkList P;
P=(LinkList)malloc(sizeof(LNode));
p->data=e;
if(!*list){
*list=p;
p->next=NULL;
}
else{
p->next=q->next;
q->next=p;
}
}
void delLink(LinkList* list,LinkList q){ //删除链表结点
LinkList r;
if(q=*list){
*list=q->next;
free(e);
}
else{
for(r=*list;r->next!=q;r=r->next);
if(r->next!=NULL){
r->next=q->next;
free(q);
}
}
}
void destroyLinkList(LinkList *list)
{
LinkList p,q;
p=*list;
while(p){
q=p->next;
free(p);
p=q;
}
*list=NULL;
}
int main(){
int e,i;
LinkList l,q;
q=l=creatLinkList(1);
scanf("%d",&e);
while(e){
insertList(&l,q,e);
q=q->next;
scanf("%d",&e);
}
q=l;
printf("链表的内容为:\n");
while(q)
{
printf("%d\t",q->data);
q=q->next;
}
q=l;
printf("\n删除最后的结点\n");
for(i=0;i<4;i++){
if(q==NULL){
printf("链表的长度小于5\n");
getche();
return;
}
q=q->next;
}
delLink(&l,q);// 找到链表的第五个元素,用q指向他,再删除q所指得结点
q=l;
while(q){
printf("%d",q->data);
q=q->next;
}
destroyLinkList(&l); //销毁这个链表
getche();
}
'''
----------
getche():输入后立即从控制台取字符,不以回车为结束(带回显)
返回输入字符对应的ASCII码
----------
**c语言中getch,getche,getchar的区别**
getchar 是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说 ,如果stdin有数据的话不用输入就可以直接读取了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。
getch() 实际是一个输入命令,作用是从键盘接收一个字符,而且并不把这个字符显示出来,就是说,你按了一个键后它并不在屏幕上显示你按的什么,而继续运行后面的代码,所以我们在C++中可以用它来实现“按任意键继续”的效果,即程序中遇到getch();这行语句,它就会把程序暂停下来,等你按任意键,它接收了这个字符键后再继续执行后面的代码。
你也许会问,为什么我们在C++中就没有在程序的末尾加上getch(),解释是,软件总是不断更新的,不好的地方当然要进行改正,getch()加在程序末尾,它又不赋值给任何变量,所以它在这个地方完全是垃圾代码,与程序无关。C++中考虑到这一点,于是在每次程序运行完了并不退出,而是自动把屏幕停下来,并显示“press any key...”叫你按任意键退出,这就好比C++在它的环境中运行程序,在程序的末尾自动加上了一行getch();语句,并且在这行语句前还添加了一行输出语句cout<<"press any key...";来提示你程序结束了,按任意键继续。
getche() 和getch()很相似,它也需要引入头文件conio.h,那它们之间的区别又在哪里呢?不同之处就在于getch()无返回显示,getche()有返回显示。