C语言数据结构(链表)单向链表的创建删除逆序
2014-11-12 20:36
393 查看
课程作业要求随机生成N个200以内的数,删除大于100的数并逆序输出。
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct node//定义链表 { int data; struct node * next; }link; link * create(int node_number)//创建链表 { link *head,*p,*s; int i,rand_number; if(node_number<1)//判断输入节点个数的正确性 { printf("输入大于1的数字:"); exit(0); } p = head = (link*)malloc(sizeof(link));//分配头结点空间 srand((unsigned) time(NULL));//随机种子生成 for(i=1;i<=node_number;i++) { rand_number= rand() % 200; s=(link*)malloc(sizeof(link)); s->data=rand_number;//赋值随机数 p->next = s;//P->next指向S p=s;//S赋给P } p->next = NULL;//最后一个节点为空 return head;//返回头指针 } void display(link *head)//显示链表内容 { link *p; p=head->next; printf("链表:\n"); while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } link *unturn(link *head)//单向链表反转 { link *p1 = NULL; link *p2 = NULL; if (head == NULL) { return NULL; } p1 = head->next; while (p1->next != NULL) { p2 = p1->next;//p2为p1 的下一个节点 p1->next = p2->next;//p1指向p2的下一个节点 p2->next = head->next;//p2->next回指向head->next head->next = p2;//head->next指向p2 } return head; } link * delete1(link *head)//删除函数 { link *p1,*p2; p1=head; if(head==NULL) { printf("\nlist null!\n"); return NULL; } while(p1->next!=NULL) //如果节点不为空 { p2 = p1; p1=p1->next; if(p1->data > 100) //判断是否大于一百 { if(p2 == head) //如果删除的是首节点 { p2->next=p1->next; free(p1); p1 = p2; } else if(p1->next == NULL)// 如果删除的是尾节点 { p2->next= NULL; free(p1); p1 = p2; } else { p2->next = p1->next;//如果是中间节点 free(p1); p1 = p2; } } } return head; } int main(void) { int node_number; link *head; printf("输入链表的节点数:\n"); scanf("%d",&node_number); printf("\n"); head=create(node_number);//创建链表 display(head); head=delete1(head);//删除节点 printf("\n"); printf("删除后的"); display(head); head=unturn(head);//逆序 printf("逆序后的"); display(head); return 0; }
相关文章推荐
- 数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- C/c++语言,求单向链表的逆序_普通方法_header+p+q工作指针
- (单向链表)数据结构的创建和功能函数(C语言)
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- 华为机试题(8)--单向链表的建立,反转(逆序),遍历显示,删除
- 创建单向动态链表、插入链表、删除链表
- 单向循环链表的创建/插入/删除/输出算法
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- 数据结构 - 如何删除单向链表的倒数第m个元素?
- 线性表之单向链表的创建、插入、删除和清除
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- 单向链表的操作:创建,删除,插入,销毁,查找
- 数据结构之链表(一)创建,插入,删除
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- 单向链表的创建 删除 插入
- 单向链表的相关操作(创建,遍历,插入,删除,逆置)
- 数据结构----单向链表之 新建-插入-删除-排序(选择法)-合并-删除-销毁