线性表

  1 #define MAXSIZE 100 //MAXSIZE 为线性表可能的最大长度
  2 #include <stdio.h> 
  3 #include <iostream> 
  4 using namespace std;
  5 typedef int ElemType; 
  6 typedef struct 
  7 
  8 { 
  9    ElemType data[MAXSIZE]; 
 10    int length; // length为线性表的长度
 11 } SqList; 
 12 
 13   SqList l; //线性表定义
 14 
 15 void InitList(SqList &L) 
 16 //初始化操作,将线性表L置空
 17 { 
 18    L.length = 0;
 19    //g给顺序表长度初始化为0  
 20 } 
 21 
 22 void CreatSqlist(SqList &L,int n)
 23  //建立一个顺序存储的线性表
 24 { 
 25    printf("请输入节点"); 
 26    int i;  
 27    for(i=0;i<n;i++)  
 28    scanf("%d",&L.data[i]);//读取元素
 29    L.length=n;//表的长度就是元素的个数
 30    fflush(stdin); //清除一个流
 31 } 
 32 
 33 void Output(SqList &L) //输出顺序表L 
 34 { 
 35    int i;  
 36    for(i=0;i<L.length;i++)  
 37    printf("%5d",L.data[i]); //每个数据占5列
 38    printf("\n"); 
 39 }  
 40 
 41 int DELETE(SqList &L,int i)//删除一个元素
 42 { 
 43    int j; 
 44 
 45    if(i<1||i>L.length)//删除位置错误
 46    {printf("error");return 0;} 
 47    else 
 48    { 
 49      for(j=i;j<L.length;j++) 
 50       L.data[j-1]=L.data[j];
 51       //依次把后一个元素往前移动一个位置
 52       L.length--;//删除之后长度减1  
 53    } 
 54    return 1; 
 55 }  
 56 
 57 int INSERT(SqList &L,int x,int i)
 58 //指定位置插入元素
 59 { 
 60    int j; 
 61    if(L.length>=MAXSIZE-1)  
 62    {printf("over flow");return 1;}//上溢
 63    else if((i<1)||(i>L.length+1)) 
 64    {printf("error");return 1;} 
 65    else 
 66    {for(j=L.length;j>=i-1;j--) 
 67      L.data[j+1]=L.data[j];
 68      //元素位置依次后移一位
 69      L.data[i-1]=x;
 70      //在第i个节点上插入x L.length=L.length+1;
 71      //插入之后长度加1
 72    } 
 73    return 0; 
 74 }  
 75 
 76 int GET(SqList &L,int i)//从表中获得一个元素
 77 { 
 78    int m; 
 79    if((i<0)||(i>L.length))
 80    {printf("overflow");return 1;} 
 81    else if((i>=1)&&(i<=L.length)) 
 82    { 
 83      m=L.data[i-1]; 
 84    } printf("%d ",m);
 85    return 0; 
 86 }  
 87 
 88 int chazhao(SqList &L,int x)//从表中查找元素
 89 { 
 90    int i,k; 
 91    printf("\n请输入你要查找的元素x=?"); 
 92    scanf("%d",&x); 
 93    for(i=0;i<=(L.length+1);i++)
 94    //从第一个元素开始查找,与X比较。
 95    { 
 96     if(x==L.data[i]) 
 97  {printf("要查找的元素%d 位于%d 上\n\n",x,i+1); 
 98      k=0;
 99     break; 
100  } 
101    }
102    if(k!=0)
103     printf("%d 不在表中",x); 
104    return 0; 
105 }  
106 
107 int PUEGE(SqList &L)
108 // 删除线性表中重复出现的多余节点
109 { 
110    int i=1,j,x,y; 
111    while(i<L.length) 
112    {x=L.data[i]; 
113      j=i+1; 
114 /*for(j=i+1;j<L.length;j++)*/ 
115    while(j<L.length) 
116    { y=L.data[j]; 
117     if(x==y)DELETE(l,j); 
118     else j++; 
119    } 
120    i++; 
121    } 
122    return 0; 
123 }  
124 
125 int main() 
126 {  int n,i,k,x; 
127    InitList(l);
128      
129    printf("请输入线性表的长度");
130    scanf("%d",&n); 
131    CreatSqlist(l,n); 
132    Output(l); 
133    
134    printf("请输入你要删除元素的位置=?");
135    scanf("%d",&k);  
136    DELETE(l,k);
137    Output(l); 
138     
139    printf("请输入想要插入的数和位置x,i=?");
140    scanf("%d,%d",&x,&i); 
141    INSERT(l,x,i);Output(l);  
142    
143    printf("请输入你要取的数在的节点位置"); 
144    scanf("%d",&i); 
145    GET(l,i); 
146    chazhao(l,x);
147    PUEGE(l);
148     
149    return 0; 
150 
151 } 

 

posted @ 2015-06-05 18:05  Vmetrio  阅读(178)  评论(0)    收藏  举报