#include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个结点,可视为链表的最小单元,包括两要素:指针域和数据域 typedef struct Node { struct Node *link; int num; } node,*pNode; pNode Del_Node(pNode pHead,int back); node * creat(int n) /*建立单链表,n为链表中结点的个数*/ { node *pTail = NULL,*pHead = NULL,*pNew = NULL; //为了记住链表的起始地址,设置根指针*pHead保存表头结点的指针 //头指针指向链表的第1个节点,他只是一个指针,不包含任何数据 //*pTail尾节点,*pNew新结点 int i; //线性表初始化,设置头结点,并使尾结点指向头结点 if((pHead = (node *)malloc(sizeof(node)))==NULL) /*分配新存储空间并检测,一个结点*/ { printf("不能分配内存空间!"); exit(0); } pHead->num=0; /*把表头结点的数据域置空*/ pHead->link=NULL; /*把表头结点的链域置空,此时还未插入任何数据*/ pTail=pHead; /*pTail指向表头结点*/ //插入结点的步骤: //1.生成新的结点,注意新结点的link指向NULL; //2.将新结点添加到表尾; //3.设置新的表尾 for(i=1;i<=n;i++)//插入n个节点 { if((pNew = (node *)malloc(sizeof(node)))==NULL) /*分配新存储空间并检测*/ { printf("不能分配内存空间!"); exit(0); } pNew->num = i; //实现循环链表 if(i < n) { pNew->link=NULL; } else { pNew->link=pHead->link;//注意头结点没有数据 } pTail->link=pNew; //新结点插到表尾 pTail=pNew;//设置新的表尾 } return pHead; } void output(node *p) { int i=0; for(i=0;i<20;i++) { printf("%d ",p->num); p= p->link; } } int main() { pNode p,tmp; p = creat(10)->link;//返回值为头指针 Del_Node(p,3); output(p); while(1); return 0; } //删除单个结点 pNode Del_Node(pNode pHead,int back) { int i = 1; pNode _node = pHead; pNode pTmp; if ((back < 1) && (NULL == _node->link)) //非空链表 { printf("删除失败!\n"); return 0; } while(i < back-1) //找到待删除结点的前一个结点 { _node = _node->link; ++i; } pTmp = _node->link; _node->link = _node->link->link; free(pTmp); //删除结点 return _node; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:597 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:822 |
人见人爱A+B (C语言代码)浏览:663 |
多输入输出练习1 (C语言代码)浏览:1219 |
【出圈】 (C语言代码)浏览:824 |
妹子杀手的故事 (C语言代码)浏览:1297 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:1100 |
罗列完美数 (C语言代码)浏览:519 |
数字游戏 (C++代码)浏览:1240 |