单链表中间节点,单链表中各节点是否连续

首页 > 经验 > 作者:YD1662022-11-04 00:25:29

单链表中间节点,单链表中各节点是否连续(13)

源码:

#include "stdio.h"

#include "malloc.h"

typedef struct node{

int data;

struct node *next;

}LNode,*LinkList;

LinkList GreatLinkList(int n)

{

/*建立一个长度为n的链表*/

LinkList p, r, list = NULL;

int e;

int i;

for (i=1;i<=n;i ){

printf("请输入第%d个结点值(共%d)个:",i,n);

scanf("%d",&e);/*获取链表结点中的数据元素*/

p=(LinkList)malloc(sizeof(LNode));/*分配一个新的链表结点*/

p->data=e;

p->next=NULL;

if (list == NULL) {

list = p;/*list指向第一个结点,list是头指针*/

} else {

r->next = p;/*将新结点连接到链表的尾部*/

}

r = p;/*指针r始终指向链表的最后一个结点*/

}

return list;/*返回链表的头指针*/

}

void insertListInOrder(LinkList *list,int e)

{

/*向按值有序(递增序列)的链表list中插入包含元素e的结点*/

LinkList p, q, r;

q = *list;

p=(LinkList)malloc(sizeof(LNode));/*生成一个新结点,由p指向它*/

p->data=e;/*向该结点的数据域赋值e*/

if (*list == NULL || e < (*list)->data) {

p->next = *list;

*list = p;

} else {

while(q != NULL && e >= q->data) {/*循环找到插入结点的位置*/

r = q;/*r指向q的前驱结点*/

q = q->next;/*q指针向后移动*/

}

p->next= q; /*插入新的结点*/

r->next = p;

}

}

void delLink(LinkList *list, LinkList q) {

LinkList r;

if (q == *list) {

*list = q->next;/*如果q指向的结点即为第1个结点,则需要修改list的值*/

free(q);/*释放被删除结点的空间*/

} else {

r = *list;

while ((r->next != q)&&(r->next != NULL)) {

r = r->next;/*通过循环找到q所指结点的前驱结点*/

}

if (r->next != NULL) {

r->next = q->next;/*删除q所指向的结点*/

free(q);/*释放被删除结点的空间*/

}

}

}

void deleteLinkList(LinkList *list) {

LinkList p = *list;/*p指向第一个结点*/

while (p != NULL) {

*list = p ->next;/* list指向p的下一个结点 */

free(p);/*释放掉p指向结点的内存空间*/

p = *list;/*p再指向第一个结点*/

}

}

void printLink(LinkList list) {

while (list != NULL) {

printf("=",list->data);/*打印出每个结点中的数据data*/

list = list->next;

}

printf("\n");

}

void main() {

int i;

LinkList q,list = NULL;

list = GreatLinkList(10); /*创建一个长度为10的链表*/

printf("The elems of this linklist is\n");

printLink(list); /*打印出链表的内容*/

printf("插入元素3\n");

insertListInOrder(&list,3);/*插入元素3*/

printf("The elems of this linklist is\n");

printLink(list); /*打印出链表的内容*/

printf("插入元素0\n");

insertListInOrder(&list,0);/*插入元素0*/

printf("The elems of this linklist is\n");

printLink(list); /*打印出链表的内容*/

printf("插入元素11\n");

insertListInOrder(&list,11);/*插入元素10*/

printf("The elems of this linklist is\n");

printLink(list); /*打印出链表的内容*/

printf("删除链表中的第5个元素:\n");

q=list;

for (i=0; i<4; i ) {

q = q->next;/*指针q指向链表中第5个元素*/

}

delLink(&list, q);/*删除q指向的结点*/

printLink(list);/*打印出链表中的内容*/

deleteLinkList(&list);/*销毁该链表*/

if (list == NULL) {

printf( " This Linklist have been deleted\n");

}

system("pause");

}

-End-

上一页1234末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.