1 #include "stdio.h"
  2 #include "malloc.h"
  3 #define datatype int
  4 typedef struct node
  5 {
  6     datatype data;        //链表的数据域
  7     struct node *next;    //链表的指针域
  8 } LNode,*LinkList;
  9
 10 LinkList Creat_LinkList1( ) //头插入法建立单链表算法
 11 {
 12     int i;
 13     int x;
 14     int n;
 15     LNode *L;
 16     L=(LNode *)malloc(sizeof(LNode));
 17     L->next = NULL;
 18     printf("输入单链表的长度(头插法):");
 19     scanf("%d",&n);
 20     printf("输入元素:");
 21     for(i=0;i<n;i++)
 22     {
 23         LNode *p;
 24         p=(LNode *)malloc(sizeof(LNode));
 25         scanf("%d",&x);
 26         p->data = x;
 27         p->next = L->next;
 28         L->next = p;
 29     }
 30     return L;
 31 }
 32 /*按序号查找 Get_Linklist(L,i)
 33 在单链表L中查找第i个元素结点,找到返回其指针,否则返回空*/
 34 LNode *Get_LinkList(LinkList L,int i)
 35 {
 36     LNode *p;
 37     int j;
 38     if(L->next==NULL)
 39         return NULL;
 40         if(i<1)
 41             return NULL;
 42         j=0;
 43         p=L;
 44     while(p->next!=NULL&&j<i)
 45     {
 46         p=p->next;
 47         j++;
 48     }
 49     if(j==i)
 50         return p;
 51     else
 52         return NULL;
 53 }
 54 /*插入运算 Insert_LinkList(L,i,x)
 55 在单链表L的第i个位置上插入值为x的元素*/
 56 int  Insert_LinkList(LinkList  L, int i, datatype  x)
 57 {
 58     LinkList p;
 59     LNode *s;
 60     int j;
 61     p=L;
 62     j=1;
 63     while(j<i){
 64         p=p->next;
 65         j++;
 66     }
 67     s=(LNode*)malloc(sizeof(LNode));
 68     s->data=x;
 69     s->next=p->next;
 70     p->next=s;
 71     return 1;
 72 }
 73 /*删除运算:Del_LinkList(L,i)
 74 删除单链表L上的第i个数据结点*/
 75 int  Del_LinkList(LinkList  L,int i)
 76 {
 77     int j;
 78      LinkList p,q;
 79      p=L;
 80      j=1;
 81      while(j<i)
 82      {
 83          p=p->next;
 84          j++;
 85      }
 86      q=p->next;
 87      p->next = p->next->next;
 88      free(q);
 89      return 1;
 90 }
 91 void print(LinkList L)           //输出单链表
 92 {   LNode *p=L;
 93     p=L->next;
 94     while(p->next!=NULL)
 95     { printf("%d->",p->data);    //输出表中非最后一个元素
 96       p=p->next;
 97     }
 98     printf("%d\n",p->data);      //输出表中最后一个元素
 99 }
100 void linkcount(LinkList L)
101 {
102     struct a{
103         int x;
104         int y;
105     }a[100];
106     int m=0;
107     LinkList p,q;
108     p=(LinkList)malloc(sizeof(LNode));
109     q=(LinkList)malloc(sizeof(LNode));
110     while(L->next){
111         a[m].x=L->next->data;
112         a[m].y=1;
113         p=L->next;
114         while(p->next)
115         {
116             if(L->next->data==p->next->data)
117             {
118                 p->next=p->next->next;
119                 a[m].y++;
120             }
121             else
122             {
123                 p=p->next;
124             }
125         }
126         m++;
127         L=L->next;
128     }
129     printf("该链表中\n");
130     for(int i=0;i<m;i++){
131         printf("%d出现%d次\n",a[i].x,a[i].y);
132     }
133 }
134
135 void main()
136 {
137     LinkList  H;
138     int i,j,k;
139     datatype x;
140     do
141     {
142     printf("\n\n\n\n");
143     printf("\t\t\t 链表子系统\n");
144     printf("\t\t*******************************\n");
145     printf("\t\t*        1----建    表     *\n");
146     printf("\t\t*        2----插    入    *\n");
147     printf("\t\t*        3----删  除    *\n");
148     printf("\t\t*        4----查  找    *\n");
149     printf("\t\t*        5----显  示    *\n");
150     printf("\t\t*        6----计    数    *\n");
151     printf("\t\t*        0----返  回    *\n");
152     printf("\t\t*******************************\n");
153     printf("\t\t 请选择菜单项(0-5):");
154     scanf("%d",&k);getchar();
155     if (k==1)
156         H=Creat_LinkList1( );      //用头插入法建立单链表
157     else if (k==2)       //在线性表第i位置处插入值为X的元素
158     {
159         printf("\n   请输入插入的位置i和数据X(输入格式:i,X):");
160         scanf("%d,%d",&i,&x);
161         j=Insert_LinkList(H,i,x);
162     }
163     else if (k==3)
164     {    printf("\n   请输入要删除元素的位置i:");
165         scanf("%d",&i);
166         j=Del_LinkList(H,i);
167         if (j == 1) printf("删除成功!!");
168         else printf("删除失败!!");
169     }
170     else if(k==4)       //查找线性表中元素值为x的位置
171     {
172         LNode *p;
173         printf("\n   请输入要查找的序号i:");
174         scanf("%d",&i);
175         p=Get_LinkList(H,i);
176         if (p!=NULL)
177         { print(H);printf("中序号为i的地址是 %d ",p);}
178         else
179         printf("链表中无此序号!!\n");
180     }
181      else if (k==5)        //输出链表
182      {    printf("\n表的存储顺序为:");
183         print(H);
184     }
185     else if (k==6)        //
186      {    printf("\n计数:");
187         linkcount(H);
188     }
189     }while(k!=0);
190 }

部分运行结果:

转载于:https://www.cnblogs.com/zongyao/p/9255348.html

课设2--线性表的操作相关推荐

  1. java实验:计算长方体的体积+线性表的操作

    目录 前言 一.计算某长方体或正方体盒子的体积 1.实验思路 2.实验代码 3.实验结果截图 二.线性表 1.实验内容 2.实验思路 3.实验代码 4.实验结果截图 总结 前言 再次进行java实验, ...

  2. c语言建立26个字母的顺序表,线性表的操作建立一个含26个英文字母的数据元素的线性表并输出该表 爱问知识人...

    顺序表操作代码如下:#includeconst int maxsize=1000;struct sequenlist{ char a[maxsize]; int len;};sequenlist se ...

  3. 链表线性表及其操作c语言代码大全,用链表实现线性表的各种操作(C语言)

    #include # include # include //定义节点结构体 typedef struct Node { int data;//数据域 struct Node * pNext;//指针 ...

  4. 线性表顺序存储的一些操作(初始化,添加,删除)

    最近有时间学一些自己想学的,就找来看看数据结构.看的是大话数据结构.之前学数据结构是大一时候,现在看这个还可以,没那时候学的累.但是还是需要进行一些总结,以免自己会忘记. 虽然大部分和书上差不多,但是 ...

  5. 数据结构—线性表顺序存储插入和删除操作

    线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...

  6. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  7. 数据结构复习-基础、线性表、栈、队列、串

    数据结构复习笔记 作者: 收集于网络 第一章:概论 数据:指所有能被输入到计算机中,且能够被计算机识别.存储和加工处理的信息的载体,是计算机操作的对象的总称. 数据元素:数据的基本单位,有时一个数据元 ...

  8. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

  9. 【数据结构(C语言版)系列一】 线性表

    最近开始看数据结构,该系列笔记简单记录总结下所学的知识,更详细的推荐博主StrayedKing的数据结构系列,笔记部分也摘抄了博主总结的比较好的内容. 一些基本概念和术语 数据是对客观事物的符号表示, ...

最新文章

  1. Netflix CEO:入华谈判进展顺利 或很快获牌照
  2. C++ 虚函数和虚表
  3. 001. Ansible简介
  4. mysql 字符设置与修改
  5. Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
  6. Python3 装饰器解析
  7. scrapy爬虫框架入门实战
  8. JSP技术之JavaBean
  9. 重写FileUpload控件让它可以显示上传后的文件名
  10. absolute和relative的区别
  11. 信号与系统学习笔记(大纲)
  12. 乐固、360加固在android 11 上报错,无法安装
  13. 使用七牛的文档转换服务将PPT转换为JPG
  14. Vulkan_Shader_Day02—光照(基础光照_Phong Lighting Model)
  15. 期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告
  16. 解析单总线协议(1-wire)
  17. Eclipse MyEclipse 代码提交时,让svn忽略classpath、target、.project
  18. ICCV2019(Segmentation):ShelfNet-论文解读《ShelfNet for Fast Semantic Segmentation》
  19. 天融信防火墙重置配置_天融信防火墙认证配置
  20. 用python中re.sub()替换文件中指定字符串

热门文章

  1. android fragment 教程,Android app开发中的Fragment入门学习教程
  2. java biz层创建代码_BIZ层调试方法
  3. 如何关闭文件服务器的同步,文件服务器同步
  4. mysql 追加水印_php 使用GD库为页面增加水印示例代码
  5. 江门计算机职称考试时间,江门职称计算机考试时间
  6. go 控制台程序 重复启动_WebAssembly 与 go
  7. python html解析对比_python htmlparse页面解析示例
  8. php标签class,dede模板标签以及dedetag.class.php模板类使用方法
  9. 从事前端开发,日常工作中必备的工具有哪些?
  10. 开课吧:C++开发需要知晓的知识有哪些?