zoukankan      html  css  js  c++  java
  • 顺序表上基本运算的实现

      1 /*
      2 程序功能:顺序表上基本运算的实现
      3 1.顺序表L的初始化
      4 2.创建一个顺序表L
      5 3.求顺序表L的长度
      6 4.按序号取顺序表L中的元素
      7 5.在顺序表L中查找元素e的位置
      8 6.在顺序表L中插入新元素
      9 7.在顺序表L中删除元素
     10 8.将线性表中元素输出
     11 9.顺序表应用举例(求顺序表A和B的交集)
     12 @润青 
     13 对于刚学数据结构的同学而言,可能有的同学理解能力比较强一点,加上前期C语言的基础,他们也许不会很长时间困惑于某一个知识点,但由于数据结构并非采用c语言进行讲述
     14 ,而且大多数教材在讲述顺序表基本运算的实现这个知识点时只给出函数的代码,这就给一些同学造成了困惑,主函数的内容需要自己添加,理解难度提升,我认为不利于学习本节
     15 内容,这也困扰了我很长时间,所以,在实现了之后,觉得有必要把内容写下来,希望能帮助到像我一样的初学者。
     16  
     17 */ 
     18 #include<stdio.h>
     19 #include<stdlib.h>
     20 #define MaxSize 100
     21 #define LEN sizeof(SeqList)
     22 typedef int DataType;
     23 typedef struct{
     24     DataType data[MaxSize];
     25     int length;
     26 }SeqList;
     27 SeqList *L;
     28 void InitList(SeqList *L)
     29 {
     30     L->length=0;
     31 }
     32 void CreatList(SeqList *L)
     33 {
     34     int k=0;
     35     DataType x;
     36     scanf("%d",&x);
     37     while(x!=0)
     38     {
     39         L->data[k]=x;
     40         k++;
     41         scanf("%d",&x);
     42     }
     43     L->length=k;
     44 }
     45 int GetLength(SeqList *L)
     46 {
     47     return L->length;
     48 }
     49 DataType GetNode(SeqList *L,int i)
     50 {
     51     if(i<1||i>L->length)
     52     {
     53         printf("不存在该位置的元素!");
     54         return 0; 
     55     }
     56     return L->data[i-1];
     57 }
     58 int LocateList(SeqList *L,DataType e)
     59 {
     60     int i;
     61     i=0;
     62     while(i<L->length&&L->data[i]!=e)
     63       i++;
     64     if(i<L->length)
     65       return i+1;
     66     else
     67       return -1;
     68 }
     69 void InsertList(SeqList *L,int i,DataType x)
     70 {
     71     if(i<1||i>L->length+1)
     72     {
     73         printf("插入位置只能介于1至n+1!"); 
     74         return; 
     75     }
     76     if(L->length==MaxSize)
     77     {
     78         printf("顺序表已满!");
     79         return;
     80     }
     81     for(int j=L->length-1;j>=i-1;j--)
     82       L->data[j+1]=L->data[j];
     83     L->data[i-1]=x;
     84     L->length++;
     85 }
     86 void DeleteList(SeqList *L,int i)
     87 {
     88     if(i<1||i>L->length)
     89     {
     90         printf("position error");
     91         return;
     92     }
     93     for(int j=i;j<=L->length-1;j++)
     94       L->data[j-1]=L->data[j];
     95     L->length--;
     96 }
     97 void PrintList(SeqList *L)
     98 {
     99     int i;
    100     printf("顺序表中元素为:
    ");
    101     for(i=0;i<L->length;i++)
    102     printf("%d ",L->data[i]);
    103     printf("
    ");
    104 }
    105 void CommElem(SeqList *A,SeqList *B,SeqList *C)
    106 {
    107     int i,k,j=1;
    108     DataType x;
    109     InitList(C);
    110     for(i=1;i<=GetLength(A);i++)
    111     {
    112         x=GetNode(A,i);
    113         k=LocateList(B,x);
    114         if(k>0)
    115         {
    116             InsertList(C,j,x);
    117             j++;
    118         }
    119     }
    120 }
    121 int main()
    122 {
    123     
    124     int i,j,x;
    125     L=(SeqList*)malloc(sizeof(SeqList));
    126     InitList(L);
    127     printf("创建一个链表,请输入链表中的元素(以0结束)
    ");
    128     CreatList(L);
    129     GetLength(L);
    130     printf("链表的长度为:%d
    ",GetLength(L)); 
    131     printf("请输入您要查询的结点i: ");
    132     scanf("%d",&i);
    133     GetNode(L,i);
    134     printf("第%d个结点的元素为:%d
    ",i,GetNode(L,i));
    135     printf("请输入您要查询的元素:");
    136     scanf("%d",&j);
    137     LocateList(L,j);
    138     printf("元素%d位于第%d个结点
    ",j,LocateList(L,j)); 
    139     printf("请输入您要插入的元素以及位置:");
    140     scanf("%d%d",&x,&i);
    141     InsertList(L,i,x);
    142     PrintList(L); 
    143     printf("请输入您要删除的结点:"); 
    144     scanf("%d",&i);
    145     DeleteList(L,i);
    146     PrintList(L); 
    147     /*顺序表应用举例 
    148     SeqList *A,*B,*C;
    149     A=(SeqList*)malloc(sizeof(SeqList));
    150     InitList(A);
    151     printf("创建一个顺序表A,请输入顺序表A中的元素(以0结束)
    ");
    152     CreatList(A);
    153     B=(SeqList*)malloc(sizeof(SeqList));
    154     InitList(B);
    155     printf("创建一个顺序表B,请输入顺序表B中的元素(以0结束)
    ");
    156     CreatList(B);
    157     C=(SeqList*)malloc(sizeof(SeqList));
    158     CommElem(A,B,C);
    159     printf("A,B的交集为:
    ");
    160     PrintList(C);
    161     */
    162     return 0;
    163 }
  • 相关阅读:
    微软推送Win10致全球网络负担增大,中国网友表示毫无压力
    hdu4336Card Collector 概率dp+状态压缩
    利用JAVA反射机制实现调用私有方法
    【D3 API 中文手冊】
    Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用演示样例
    输入3个整数,按由小到大的顺序输出(使用指针)
    【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager
    HDU 1533 Going Home(KM完美匹配)
    项目期复习:JS操作符,弹窗与调试,凝视,数据类型转换
    Oracle11gR2 Windows 7 64bit and PL/SQL Developer排错
  • 原文地址:https://www.cnblogs.com/nyist0/p/8516263.html
Copyright © 2011-2022 走看看