用结构体和指针实现一个单链表的基本操作程序link.c,主要包括以下功能模块:
1.系统菜单模块设计(MenuLine() )。为了在主函数(main())反复执行上图图1单链表子系统的各操作函数,我们在主函数中用循环语句实现此功能,并设计了一个菜单显示各功能选项,用函数MenuLine() 表示
2.单链表的类型定义(typedef struct linknode )。
typedef int DataType; /定义DataType为int类型/
typedef struct linknode /单链表存储类型/
{
DataType data; /定义结点的数据域/
struct linknode *next; /定义结点的指针域/
} LinkList;
3.单链表的初始化(LinkList *InitList())。
LinkList *InitList()
{ /初始化链表函数/
LinkList head;
head=(LinkList)malloc(sizeof(LinkList)); /动态分配一个结点空间/
head->next=NULL;
return head; /头结点L指针域为空,表示空链表/
}
4.显示输出链表函数(void DispList(LinkList *head))。
5.建立链表函数( void CreateList(LinkList *head,int n)),要求建立后显示输出链表。
6.按位置插入元素函数(void InsList(LinkList *head, int i, DataType x)),要求插入后显示输出链表。。
(7)按位置删除链表中元素函数(void DelList(LinkList *head,int i)),要求删除后显示输出链表。
(8)在链表中按位置查找元素(void SearchList(LinkList *head,int i))。
(9)在链表中查找值为x的元素位置(Locate(void LinkList *head,DataType x))。
(10)求链表长度函数(int LengthList(LinkList *head))。
软件:Visual C++ 6.0
C语言程序设计(单链表的基本操作)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 技术专家团-小桥流水 2021-12-18 09:33关注
如下:
search函数和locate函数你在main函数中调用一下就可以了。#include <stdio.h> #include <stdlib.h> typedef int DataType; /*定义DataType为int类型*/ typedef struct linknode { DataType data; struct linknode * next; }LinkList; //创建线性表 LinkList * CreateList() { int i,n; struct linknode * head,*p,*t; head = (struct linknode *)malloc(sizeof(linknode )); head->next = NULL; t = head; printf("请输入链表的长度:"); scanf("%d",&n); printf("请输入链表数据:"); for (i=0;i<n;i++) { p = (struct linknode *)malloc(sizeof(linknode )); scanf("%d",&(p->data)); p->next = NULL; t->next = p; t = p; } return head; } int LengthList(LinkList *head) { LinkList* p ; int len = 0; if (head == 0) { return 0; } p = head->next; while (p) { len++; p = p->next; } return len; } //插入 LinkList * InsList(LinkList *head,int pos,DataType data) { struct linknode * p = head,*t; int i=1; if(pos <1 || pos > LengthList(head)) { printf("插入位置错误"); return head; } while(i<pos && p) { p = p->next; i++; } if (p) { t = (struct linknode *)malloc(sizeof(linknode )); t->data = data; t->next = p->next; p->next = t; printf("插入成功\n"); }else printf("插入位置不合适,插入失败\n"); return head; } //删除 LinkList * DelList(LinkList* head,int pos) { int i = 1; struct linknode * p = head,*t; if (pos < 0 || pos > LengthList(head)) { printf("删除位置错误"); return head; } while(i<pos && p) { p = p->next; i++; } if (p) { t = p->next; p->next = t->next; free(t); t = 0; printf("删除成功\n"); }else printf("删除成功\n"); return head; } //显示 void DispList(LinkList * head) { struct linknode * p = head->next; while(p) { printf("%d ",p->data); p = p->next; } printf("\n"); } //在链表中按位置查找元素 void SearchList(LinkList *head,int pos) { LinkList* p; int i = 1; if (p<0 || pos > LengthList(head)) { printf("位置错误"); return; } p = head->next; while (p && i!= pos) { p = p->next; i++; } if(p) { printf("查找到的数据为:%d\n",p->data); }else printf("未找到\n"); } //查找位置 void Locate(LinkList *head,DataType x) { LinkList* p; int i=1; if(head == 0) { printf("链表为空\n"); return ; } p = p->next; while(p) { if (p->data == x) { printf("%d所在位置:%d\n",x,i); return ; }else { i++; p = p->next; } } printf("未找到该元素\n"); return ; } //释放空间 void Free(LinkList * head) { struct linknode * p; while(head) { p = head->next; free(head); head = p; } head = 0; } int main() { int pos,data; struct linknode * head = CreateList(); DispList(head); //插入 printf("请输入插入位置(从1开始)和数据:"); scanf("%d %d",&pos,&data); head = InsList(head,pos,data); printf("插入后链表数据:"); DispList(head); //删除 printf("请输入删除位置(从1开始):"); scanf("%d",&pos); head = DelList(head,pos); printf("删除后链表数据:"); DispList(head); //释放空间 Free(head); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 软件测试决策法疑问求解答
- ¥15 win11 23H2删除推荐的项目,支持注册表等
- ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
- ¥15 qt6.6.3 基于百度云的语音识别 不会改
- ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
- ¥15 神经网络怎么把隐含层变量融合到损失函数中?
- ¥15 lingo18勾选global solver求解使用的算法
- ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
- ¥20 测距传感器数据手册i2c