zoukankan      html  css  js  c++  java
  • c语言线性表

      1 #include<stdio.h>
      2 #include<time.h>
      3 #include<stdlib.h>
      4 #define MAXSIZE 20 //初始长度
      5 
      6  
      7 
      8 typedef int ElemType; //类型为int
      9 typedef struct{
     10     ElemType data[MAXSIZE];//数组。存储元素
     11     int length;          
     12 }SqList;
     13 //顺序表的初始化 
     14 SqList Init(){
     15     //创建一个空的线性表L,时间复杂度O(1) 
     16     SqList L; //定义
     17     L.length=0;//初始长度为0
     18     return L; //返回空顺序表 
     19 }
     20 //顺序表的建立
     21 SqList Create(SqList L)
     22 {
     23     int i;
     24     srand((unsigned)time(NULL));
     25     for(i=0;i<10;i++)
     26     {
     27         L.data[i]=rand()%100;
     28         L.length++;
     29     }
     30     return L; 
     31 } 
     32 //用e返回线性表中第i个元素的值
     33 //此时L应该已经存在
     34 ElemType GetElem(SqList L,int i)
     35 {
     36     if(i<1||i>L.length)
     37     {
     38         printf("查找位置错误!
    ");//位置是否合法 
     39         return 0;       
     40     } 
     41     else
     42         return L.data[i-1];
     43 } 
     44 //顺序表的插入
     45 SqList ListInsert(SqList L, int i, ElemType x)
     46 { //在顺序表中的第i个位置插入元素x
     47 
     48     if(L.length == MAXSIZE)
     49         printf("表已经满了
    ");//插入时,必须检查表是否已经满了。否则会出现溢出错误
     50     else if(i < 1 || i > L.length)
     51         printf("插入位置错误
    ");//判断插入位置的有效性
     52     int j;
     53     for(j = L.length-1; j >= i - 1; j--)//第i个位置元素逐个后移
     54         L.data[j+1] = L.data[j];
     55     L.data[i-1] = x;                        //插入元素x
     56     L.length++;                         //顺序表长度增1
     57 
     58     return L;
     59 
     60 }
     61 
     62 //删除元素 
     63 SqList ListDelete(SqList L,int i)
     64 {
     65     int k;
     66     if(L.length==0) //线性表为空 
     67         printf("表为空无法删除"); 
     68     if(i<1||i>L.length)
     69         printf("删除的位置不正确");
     70     if(i<L.length)
     71     {
     72         for(k=i;k<L.length;k++)//将删除的位置后继元素前移 
     73              L.data[k-1]=L.data[k];
     74         L.length--;
     75     }
     76     return L;
     77 }
     78 int main()
     79 {
     80     SqList l;
     81     l=Init();
     82     l=Create(l);
     83     char choose;//操作选择 
     84     int find;//查找操作 
     85     int found;//查找到的元素 
     86     
     87     int position;//标记元素的位置
     88     int value;//插入的元素
     89      
     90     int i;
     91     
     92     printf("初始化完成.........
    "); 
     93     
     94     while(true){ 
     95         
     96         
     97         printf("
    1.查看顺序表 
    2.查找元素 
    3.插入元素 
    4.删除元素  
    5.退出 
    请选择你的操作。。。"); 
     98         scanf("%c",&choose);
     99         
    100         switch(choose){
    101             case '1':
    102                 system("cls");
    103                 printf("查看线性表:"); 
    104                 for(i=0;i<l.length;i++)
    105                 {
    106                     printf("%d  ",l.data[i]);
    107                 } 
    108                 printf("
    ");
    109                 break;
    110             case '2':
    111                 system("cls"); 
    112                 printf("输入你要查找第几个元素?
    "); 
    113                 scanf("%d",&find);
    114                 found=GetElem(l,find);
    115                 printf("第%d个值为%d
    ",find,found); 
    116                 break;
    117             case '3':
    118                 system("cls");
    119                 printf("请输入要插入的元素位置:"); 
    120                 scanf("%d",&position);
    121                 printf("输入要插入的元素的值:");
    122                 scanf("%d",&value); 
    123                 l=ListInsert(l,position,value);
    124                 
    125                 printf("
    插入后的顺序表为:");
    126                 for(i=0;i<l.length;i++)
    127                 {
    128                      printf("%d  ",l.data[i]);
    129                 } 
    130                 printf("
    ");
    131                 break; 
    132             case '4':
    133                 system("cls");
    134                 printf("请输入要删除掉的元素位置:
    "); 
    135                 scanf("%d",&position);
    136                 l=ListDelete(l,position);
    137                 printf("
    删除后的顺序表为:");
    138                 for(i=0;i<l.length;i++)
    139                 {
    140                      printf("%d  ",l.data[i]);
    141                 } 
    142                 printf("
    ");
    143                 break;
    144             case '0': 
    145                 exit(0);
    146                 
    147     } 
    148     
    149     }
    150     system("pause");
    151 } 
  • 相关阅读:
    HDU 1754 I Hate It (线段树)
    HDU 1394 Minimum Inversion Number (树状数组)
    天梯赛 L2-012 关于堆的判断 (二叉树)
    HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)
    [leetcode-77-Combinations]
    [leetcode-101-Symmetric Tree]
    [leetcode-21-Merge Two Sorted Lists]
    [leetcode-109-Convert Sorted List to Binary Search Tree]
    [leetcode-507-Perfect Number]
    [leetcode-537-Complex Number Multiplication]
  • 原文地址:https://www.cnblogs.com/adaonling/p/3750069.html
Copyright © 2011-2022 走看看