线性表
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 }