C语言链表(十七)
来源:互联网 发布:大数据时代质量管理 编辑:程序博客网 时间:2024/05/23 20:28
转自:http://blog.163.com/xujian900308@126/blog/static/1269076152011917101420316/
#include <stdio.h>#include <stdlib.h>struct grade { int score; struct grade *next;} *head, *pnew;typedef struct grade NODE;//创建链表struct grade *create();//插入链表void insert(NODE *head,NODE *pnew,int i);//删除列表void pdelete(NODE *head, int i);//输出链表void display(NODE *head);//销毁链表void Pfree(NODE *head);int main(int argc, const char * argv[]){ head = create(); if (head==NULL) { return 0; } puts("输出创建的链表"); display(head); pnew = (NODE*)malloc(sizeof(NODE)); if (pnew==NULL) { puts("创建失败"); return 0; } display(pnew); //将新节点插入节点3的后面 pnew->score = 33; insert(head, pnew, 3); puts("插入后的链表"); display(head); //删除节点3 pdelete(head, 3); puts("删除后的链表: "); display(head); /* 输出: 输入学生成绩 100 90 80 70 30 -10 输出创建的链表 100 90 80 70 30 插入后的链表 100 90 80 33 70 30 删除后的链表: 100 90 33 70 30 */ return 0;}struct grade *create(){ NODE *head, *tail, *pnew; int score; //创建头节点 head = (NODE*)malloc(sizeof(NODE)); if (head==NULL) { puts("创建失败"); return NULL; } //头节点指针域置NULL head->next = NULL; //开始时尾指针指向头节点 tail = head; puts("输入学生成绩"); //创建链表 while (1) { scanf("%d",&score); //成绩为负退出循环 if (score<0) { break; } //创建新节点 pnew = (NODE*)malloc(sizeof(NODE)); if (pnew==NULL) { return NULL; } pnew->score = score; //新节点指针域置空 pnew->next = NULL; //新节点插入到表尾 tail->next = pnew; //为指针指向当前的尾节点 tail = pnew; } return head;}//插入链表void insert(NODE *head,NODE *pnew,int i){ NODE *p; int j; p=head; for(j=0;j<i&&p!=NULL;j++) //p指向要插入的第i个节点 p=p->next; if(p==NULL) //节点i不存在 { printf("与插入的节点不存在!"); return; } pnew->next=p->next; //插入节点的指针域指向第i个节点的后继节点 p->next=pnew; //犟第i个节点的指针域指向插入的新节点}//删除列表void pdelete(NODE *head, int i){ NODE *p,*q; int j; if(i==0) //删除的是头指针,返回 return; p=head; for(j=1;j<i&&p->next!=NULL;j++) p=p->next; //将p指向要删除的第i个节点的前驱节点 if(p->next==NULL) //表明链表中的节点不存在 { printf("不存在!"); return; } q=p->next; //q指向待删除的节点 p->next=q->next; //删除节点i,也可写成p->next=p->next->next free(q); //释放节点i的内存单元}//输出链表void display(NODE *head){ NODE *p; for(p=head->next;p!=NULL;p=p->next) { printf("%d ",p->score); } printf("\n");}//销毁链表void Pfree(NODE *head){ NODE *p,*q; p=head; while(p->next!=NULL) //每次删除头节点的后继节点 { q=p->next; p->next=q->next; free(q); } free (head); //最后删除头节点}
0 0
- C语言链表(十七)
- c语言学习笔记十七
- (c语言)二叉树中序线索(数据结构十七)
- C语言函数集(十七)
- 神奇的C语言十七:typeof关键字
- C语言开发总结(十七)
- C语言开发总结(二十七)
- C语言入门(十七)指针概念
- 【C语言简单说】十七:数组
- 简明C语言教程(十七)函数
- C语言入门教程 (十七) 指针函数和函数指针
- 【C语言复习(十七)】多维数组和多维指针
- 【C语言简单说】十七:数组(补)
- 一起talk C栗子吧(第二十七回:C语言实例--插入排序)
- 一起talk C栗子吧(第四十七回:C语言实例--走迷宫一)
- 一起talk C栗子吧(第五十七回:C语言实例--main函数的参数)
- 一起talk C栗子吧(第六十七回:C语言实例--DIY字符串长度函数)
- 一起talk C栗子吧(第七十七回:C语言实例--DIY ls命令续)
- 使用SwipeBackLayout设置windowIsTranslucent导致Activity动画失效
- HDU 1231 最大连续子序列(DP)
- SearchView
- Cron 表达式
- load initialize
- C语言链表(十七)
- 一个命令设置进入越狱iPhone不需要输入密码
- 关于GCD总结(参考大神博客+自己想法)
- JS的基础类型与引用类型
- An example for accessing remote mysql server
- uva 10115
- APP在线演示预览网站appetize.io详细使用介绍
- 二叉平衡树(Java)
- How to use btt with blktrace to analysis the trace file