数据结构实训三简单的链表
2012-08-31 09:06
405 查看
/*题目要求: 设计以设计菜单项的处理功能为基础,5个不同功能的算法实现编程题目,目的是熟悉利用链表结构来解决实际应用问题的能力,进一步理解和熟悉线性表的链式存储结构。 为了实现数据管理的几种操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单配上相应的功能。 题目内容: 主控菜单设计要求: 1.主控菜单设计要求:程序运行后,给出6个菜单项的内容和输入提示: 1.链表的建立 2.链表结点的插入 3.链表结点的查询 4.链表结点的删除 5.链表的输出 0.退出管理系统 请 选 择0-5: 2.设计要求 使用数字0-5来选择菜单项,其他输入则不起作用。 3.设计过程中,按照各个菜单的功能要求,编写相应的函数。 参考源程序:z*/ /*----------------------------------- 主控菜单处理测试程序 ------------------------------------*/ #include<stdio.h> #include<string.h> #include<stdlib.h> typedef int DataType; typedef struct node { DataType data; struct node *next; }ListNode; typedef ListNode *LinkList; LinkList head; ListNode *p; int menu_select();/*菜单选择函数程序*/ LinkList CreateList();/*用尾插入法建立通讯录链表函数*/ void InsertNode(LinkList head,ListNode *p);/*在通讯录链表head中插入结点*/ ListNode *ListFind(LinkList head);/*有序通讯录链表上的查找*/ void DelNode(LinkList head);/*通讯录链表上结点的删除*/ void PrintList(LinkList head);/*通讯录链表的输出函数*/ void main() { for(;;) { switch(menu_select()) { case 1: printf("*****************************************\n"); printf("* 链 表 的 建 立 *\n"); printf("******************************************\n"); head=CreateList(); break; case 2: printf("*****************************************\n"); printf("* 链 表 信 息 的 添 加 *\n"); printf("******************************************\n"); p=(ListNode*)malloc(sizeof(ListNode)); scanf("%d", &p->data); InsertNode(head,p); break; case 3: printf("*****************************************\n"); printf("* 链 表 信 息 的 查 询*\n"); printf("******************************************\n"); p=ListFind(head); if(p!=NULL) { printf("================================\n"); printf("%d \n",p->data); printf("====================================\n"); } else printf("没查到要查询的数据!\n"); break; case 4: printf("*****************************************\n"); printf("* 链 表 信 息 的 删 除 *\n"); printf("******************************************\n"); DelNode(head); break; case 5: printf("*****************************************\n"); printf("* 链 表 的 输 出 *\n"); printf("******************************************\n"); PrintList(head); break; case 0: printf("\t 再 见!\n"); return; } } } /******************************* 菜单选择函数程序 *******************************/ int menu_select() { int sn; printf("\n 数据管理系统\n"); printf("=================================\n"); printf(" 1.链表的建立 \n"); printf(" 2.结点的插入 \n"); printf(" 3.结点的查询 \n"); printf(" 4.结点的删除 \n"); printf(" 5.链表的输出 \n"); printf(" 0.退出管理系统 \n"); printf("===================================\n"); printf(" 请 选 择 0-5 \n"); for(;;) { scanf("%d",&sn); if(sn<0||sn>5) printf("\n\t输入错误,重选0-5:"); else break; } return sn; } /******************************* 用尾插入法建立通讯录链表函数 *******************************/ LinkList CreateList() { LinkList head=(ListNode*)malloc(sizeof(ListNode)); ListNode *p,*rear; int flag=0; rear=head; while(flag==0) { p=(ListNode *)malloc(sizeof(ListNode)); printf("请输入要插入的数据\n"); scanf("%d",&p->data); rear->next=p; rear=p; printf("结束建表吗?(1/0):1.结束 0.否"); scanf("%d",&flag); } rear->next=NULL; return head; } /******************************* 在链表head中插入结点 *******************************/ void InsertNode(LinkList head,ListNode *p) { ListNode *p1,*p2; p1=head; p2=p1->next; while(p2!=NULL && p2->data<p->data) { p1=p2; p2=p2->next; } p1->next=p; p->next=p2; } /******************************* 有序链表上的查找 *******************************/ ListNode *ListFind(LinkList head) { ListNode *p; DataType num; p=head->next; printf("请输入要查找的数据\n"); scanf("%d",&num); while(p && p->data!=num) p=p->next; if(p==NULL||p->data>num) p=NULL; return p; } /******************************* 链表上结点的删除 *******************************/ void DelNode(LinkList head) { char jx[3]; ListNode *p,*q; p=ListFind(head); if(p==NULL) { printf("没有查到要删除的数据!\n"); return ; } printf("真的要删除该结点吗?(y/n): "); scanf("%s",jx); if(strcmp(jx,"Y")==0||strcmp(jx,"y")==0) { q=head; while(q!=NULL&&q->next!=p) q=q->next; q->next=p->next; free(p); printf("数据已被删除!\n"); } } /******************************* 链表的输出函数 *******************************/ void PrintList(LinkList head) { ListNode *p; p=head->next; printf("----------------------------------\n"); while(p!=NULL) { printf("%d\n", p->data); printf("=========================================\n"); p=p->next; } }
相关文章推荐
- 数据结构复习 之 一个简单双向链表的实现
- 数据结构之链表与数组(三)-单向链表上的简单操作
- 简单数据结构之链表(无头节点)
- c语言简单的数据结构动态链表
- Java数据结构之简单的链表的实现
- 简单数据结构之链表(无头节点)
- 几种基本数据结构--栈、队列、双向链表、有根树的分析和简单实现
- 数据结构:链表的简单操作
- 数据结构链表的简单处理
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---环形队列篇
- C语言数据结构之循环链表的简单实例
- [java数据结构]--java双向链表LinkedList的简单实现
- 链表数据结构的简单理解
- 简单数据结构——单向链表
- [数据结构]java实现的简单链表的 头/尾插法
- 队列模拟(简单链表数据结构的处理)
- 数据结构-简单的链表结构
- 数据结构之简单链表(尾部插入数据)
- 简单数据结构之双向链表(C++实现)
- 【JAVA数据结构】 简单链表的实现