c语言实现单链表

来源:互联网 发布:阿里云服务器升级带宽 编辑:程序博客网 时间:2024/04/29 10:58

图片示例:


实现代码:

#include <stdio.h>#include <stdlib.h>typedef struct node{int data;struct node *pNext;}NODE;NODE *create(void) //创建链表{NODE *head = (NODE *)malloc(sizeof(NODE)); //创建头节点,不保存数据NODE *p = head; //保存头节点的地址int i;printf("输入你要创建的节点个数:");scanf("%d", &i);if(i == 0)exit(0); //不创建节点,直接退出程序.for(int j = 0; j < i; j++){NODE *node = (NODE *)malloc(sizeof(NODE));printf("输入第%d个节点的数据:", j+1);scanf("%d", &node->data);//将节点,进行链接node->pNext = NULL;head->pNext = node;head = node;}return p;}void print(NODE *head) //打印链表{int i = 1;while(head = head->pNext){printf("第%d个节点,数据为%d\n", i, head->data);i++;}}void insert(NODE *head, int data, int num)//插入{if(num <= 0){printf("错误:无法检索到该位置!\n");exit(1);}NODE *p = head;NODE *node = (NODE *)malloc(sizeof(NODE)); //创建一个新节点保存数据node->data = data;node->pNext = NULL;//检索到要插入位置的前一个节点for(int i = 0; i < num-1; i++){if(p == NULL){printf("超出链表范围!\n");exit(1);}p = p->pNext;}//节点插入if(p->pNext == NULL){p->pNext = node;}else{NODE *temp = p->pNext;p->pNext = node;node->pNext = temp;}}void delete(NODE *head, int num)//删除{NODE *p = head;if(num <= 0){printf("错误:无法检索到该位置!\n");exit(1);}//检索到要插入位置的前一个节点for(int i = 0; i < num-1; i++){if(p == NULL){printf("超出链表范围!\n");exit(1);}p = p->pNext;}//删除节点if(p->pNext == NULL){printf("超出链表范围!");exit(1);}else{NODE *temp = p->pNext;p->pNext = p->pNext->pNext;free(temp);}}int main(){NODE *head;head = create();//insert(head, 100, 5);//insert(head, 100, 1);//delete(head, 1);//delete(head, 2);print(head);return 0;}


0 0
原创粉丝点击