编写C程序,实现单链表的下列功能:
1、 从键盘输入一组数据,创建单链表;
2、 输出单链表;
3、 插入元素,给出插入成功或失败的信息;
4、删除元素,给出删除成功或失败的信息。
#include<stdio.h> #include<stdlib.h> typedef struct LNode { //声明结构体用来描述单链表 int data; //单链表中结点的数据域 struct LNode* next; //单链表中结点的指针域 }LNode, * LinkList; LNode* head; void printStar() //连续输入几十个*,用来设计虚拟界面的边框 { int i; for (i = 0; i < 70; i++) printf("*"); printf("\n"); } void menu() //因为C语言无法创建可视化界面,因此这里创建一个虚拟的界面,方便用户操作 { printStar(); printf("\t\t\t欢迎进入单链表操作界面!\n"); printf("请从键盘输入数字,完成对应的操作(1到4为有效操作,输入其他退出程序)\n"); printf("\t 1.创建单链表\n"); printf("\t 2.打印单链表\n"); printf("\t 3.插入结点\n"); printf("\t 4.删除结点\n"); printStar(); } LNode* CreateHead() { //单链表的初始化操作 head = (LNode*)malloc(sizeof(LNode)); head->next = NULL; return head; } LNode* CreateNext() { //创建单链表(尾插法) LNode* p, * r; int temp; printf("创建单链表:\n"); printf("输入的值为1到9之间的数,输入'0'结束\n"); printf("请输入结点值: "); fflush(stdin); scanf_s("%d", &temp); r = head; while (temp != 0) { if ((0 < temp) && (temp < 10)) { p = (LinkList)malloc(sizeof(LNode)); p->data = temp; p->next = NULL; r->next = p; r = p; printf("请输入结点值:"); fflush(stdin); scanf_s("%d", &temp); } else { temp = 0; printf("输入错误,输入的值应为1到9之间的数\n"); } } return head; } void OutPutLink() { //打印单链表 LNode* p; p = head; printf("打印单链表:\n"); while (p->next != NULL) { p = p->next; printf("%d->", p->data); } printf("NULL"); printf("\n"); } void Insert(LNode* L) { //插入结点 int i, e; printf("请输入插入位置:"); fflush(stdin); scanf_s("%d", &i); printf("请输入数据:"); fflush(stdin); scanf_s("%d", &e); int j = 0; LNode* p = L; while (p && (j < i - 1)) { p = p->next; j++; } if (!p || (j > i - 1)) printf("插入失败\n"); LNode* t = (LNode*)malloc(sizeof(LNode)); t->data = e; t->next = p->next; p->next = t; printf("插入成功\n"); } void Delete(LNode* L) { //删除结点 int i; printf("请输入删除位置:"); fflush(stdin); scanf_s("%d", &i); int j = 0; LNode* p = L; LNode* del = NULL; while ((p->next) && (j < i - 1)) { p = p->next; j++; } if (!(p->next) || (j > i - 1)) printf("删除失败\n"); //增强程序的健壮性 del = p->next; p->next = del->next; free(del); printf("删除成功\n"); } int main() { int select, flag = 1;//flag意思是标记,用来表示用户是否选择了1-4操作,如果不是就将flag设置为0,表示用户不选择继续操作,也就是退出程序 head = CreateHead(); //初始化单链表 menu(); while (flag == 1) { printf("您选择的操作是:"); fflush(stdin); //清除键盘缓冲区,不然无法连续读取用户刚刚从键盘输入的字符,因为可能读取的是缓冲区以前保存的字符 scanf_s("%d", &select); switch (select) { //根据用户的输入,调用前面写的子函数,完成单链表的3个功能 case 1: head = CreateNext(); printf("\n"); break; //创建单链表 case 2: OutPutLink(); printf("\n"); break; //打印单链表 case 3: Insert(head); printf("\n"); break; //插入结点 case 4: Delete(head); printf("\n"); break; //删除结点 default:printf("您选择退出程序,欢迎下次光临!\n"); flag = 0; } } printf("\n"); system("pause"); return 0; }标签:head,单链,LNode,删除,结点,next,插入,printf From: https://www.cnblogs.com/smartlearn/p/16882973.html