单循环链表的基本操作

news/2025/1/15 21:57:53/
/** 单循环链表的基本操作*/
#include<stdio.h>
#include<stdlib.h>typedef struct Node
{int data;struct Node *next;
}Node;int main()
{
Node *creat();
Node *insert(Node *head);
Node *insert2(Node *head);
Node *del(Node *head);
Node *show(Node *head);
int surface();char a;Node *pt;while(1){surface();scanf("%c",&a);switch(a){case '1':{pt=creat();break;}case '2':{pt=insert(pt);break;}case '3':{pt=insert2(pt);break;}case '4':{pt=del(pt);break;}case '5':{pt=show(pt);break;}case '0':{return;}}}}
//创建空链表
Node *creat()
{setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区Node *head;head = (Node*)malloc(sizeof(Node));head->next = head;printf("链表初始化完成!!任意健继续!");getchar();return head;}//插入节点(尾插法)
Node *insert(Node *head)
{Node *p,*q;//使q指向最后一个节点for(q=head;q->next!=head;q=q->next);while(1)
{//使指针p指向新开辟节点,并对其数据域赋值p = (Node*)malloc(sizeof(Node));printf("输入新插入学生成绩");scanf("%d",&p->data);if(p->data==0){break;}p->next = head;q->next = p;q = p;}setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区  printf("节点插入完成!!任意健继续!");getchar();return head;
}
//插入节点(头插法)
Node *insert2(Node *head)
{Node *p,*q;while(1){//使指针p指向新开辟节点,并对其数据域赋值p = (Node*)malloc(sizeof(Node));printf("输入新插入学生成绩");scanf("%d",&p->data);if(p->data==0){break;}p->next = head->next;head->next = p;}setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区  printf("节点插入完成!!任意健继续!");getchar();return head;
}//删除节点
Node *del(Node *head)
{Node *p,*q;int a;printf("输入要删除的成绩");scanf("%d",&a);for(p = head;p->next!=NULL;p=p->next){//寻找前趋节点if(p->next->data==a){break;}}if (p->next == NULL) return head;q = p->next;p->next = p->next->next;free(q);printf("节点删除完成!!任意健继续!");setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区 getchar();return head;
}
//输出所有节点数据
Node *show(Node *head)
{Node *p;for(p=head->next;p!=head;p=p->next){printf("%4d",p->data);       }printf("\n按任意健继续!");getchar();getchar();return head;
}
//主界面
int surface()
{system("clear");printf("**单循环链表的基本操作**\n");printf("1.初始化空链表\n");printf("2.插入节点(尾插法)\n");printf("3.插入节点(头插法)\n");printf("4.删除节点\n");printf("5.打印所有数据\n");printf("0.退出系统\n");printf("输入选项:");
}

http://www.ppmy.cn/news/872977.html

相关文章

单场淘汰制场次计算方法_单循环淘汰赛什么意思?

01 单循环淘汰赛是所有参加比赛的队均能相遇一次&#xff0c;最后按各队在全部比赛中的积分、得失分率排列名次。如果参赛球队不多&#xff0c;而且时间和场地都有保证&#xff0c;通常都采用这种竞赛方法。 在体育比赛中&#xff0c;经常会听到单场淘汰赛、单循环淘汰赛&#…

单场淘汰制场次计算方法_淘汰赛、单循环赛和双循环赛的计算方法分别是什么?...

展开全部 一、淘汰赛的计算方法&#xff1a;体育比赛和其它各种比赛中的一种赛制&#xff0c;在e69da5e6ba9062616964757a686964616f31333433663062这种赛制中赛员两两相对&#xff0c;输一场即淘汰出局。每一轮淘汰掉一半选手&#xff0c;直至产生最后的冠军。 二、单循环赛的…

数据结构——单循环链表的

循环链表&#xff1a;循环链表是一个首尾相接的链表。将单链表最后一个结点的指针域由NULL改为指向表头结点&#xff0c;就得到了单链形式的循环链表&#xff0c;并称为循环单链表。同样还可以有多重链的循环链表。 //定义结构体 typedef struct Node {int data;struct Node *…

单循环完成快速排序(C语言)

注&#xff1a;这个代码是一位强者教我的&#xff0c;我以一个初学者的思维加了点注来帮助更多像我一样刚刚入门想学习算法又不会C的编程者们理一理思路&#xff08;我是屑大学生&#xff0c;加的注可能会有逻辑不严谨的地方&#xff09;&#xff0c;希望对你们有些帮助 下面以…

6.1 双循环与单循环求1到10的阶乘

双循环: 1 #include<stdio.h>2 int main()3 {4 int jiech,i,j;5 long int S=0;6 for(i=1;i<=10;i++)7

判断带头结点的单循环链表为空表的条件

判断带头结点的单循环链表为空表的条件 判断空表的条件是L->next是否等于L&#xff1b; 在循环中判断当前结点是否是尾结点的条件是p->next是否等于L&#xff01;即当前结点的指针域是否指向头结点。

数据结构-线性表-单循环链表(使用尾指针)(c++)

目录 单循环链表说明注意 &#xff08;一&#xff09;无参构造函数&#xff08;二&#xff09;有参构造函数&#xff08;三&#xff09;析构函数&#xff08;四&#xff09;获取长度&#xff08;五&#xff09;打印数组&#xff08;六&#xff09;获取第i个元素的地址&#xff…

链表(单/双/单循环/双循环)

文中链接附上java版代码 1.单链表 单链表是一种链式存储的数据结构&#xff0c;方便插入/删除数据元素&#xff0c;对比数组&#xff0c;在进行插入删除等操作时&#xff0c;更节省空间。单链表中每一个结点的构成都是由数据元素指针构成的 2.单循环链表 单循环链表与单链表…