编写一个程序,要求:从终端输入一组整数(大于10个数),以0作为结束标志,将这一组整数存放在一个链表中(结束标志0不包括在内),打印出该链表中的值。然后删除该链表中的第5个元素,打印出删除后的结果。最后再内存中释放掉改内存。
#include "stdio.h"
typedef int ElemType;
typedef struct node{
ElemType data; //数据域
struct node *next; //指针域
}LNode, *LinkList;
LinkList GreatLinkList(int n){
//创建一个链表,包含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; //赋值链表头指针
else
r->next=p; //将结点连入链表
r=p;
}
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(q);
}
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;
}
main()
{
int e, i;
LinkList l, q;
q=l=GreatLinkList(i); //创建一个链表结点,q和l指向该结点
scanf("%d", &e);
while(e) //循环地输入数据,同时插入新生成的结点
{
insertList(&l, q, e);
q=q->next;
scanf("%d", &e);
}
q=l;
printf("The content of the linklist\n");
while(q) //输出链表中的内容
{
printf("%d ", q->data);
q=q->next;
}
q=l;
printf("\nDelete the fifth element\n");
for(i=0; i<4; i++) //将指针q指向链表的第5个元素
{
q=q->next;
}
delLink(&l, q); //删除q所指的结点
q=l;
while(q) //打印出删除后的结果
{
printf("%d ", q->data);
q=q->next;
}
destroyLinkList(&l); //释放掉该链表
getche(); //该函数一般在Linux中使用
}
程序内容:
1、应用函数GreatLinkList()创建一个只含有1个结点的链表,并向该结点中输入数据
2、然后通过函数insertList()向链表中插入新的结点,在插入结点的同时插入数据,直到输入0为止。数据从键盘输入
3、然后打印出该链表中的数据。再通过循环使指针q指向该链表的第5个元素,调用函数delLink()删除q所指的结点,打印出删除元素后链表中的值。
4、最后调用destroyLinkList()函数释放掉链表所占据的内存空间。