順序表上基本運算的實現
阿新 • • 發佈:2018-03-06
tdi ret 序號 tle 內容 spa turn == 長度
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("順序表中元素為:\n"); 101 for(i=0;i<L->length;i++) 102 printf("%d ",L->data[i]); 103 printf("\n"); 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結束)\n"); 128 CreatList(L); 129 GetLength(L); 130 printf("鏈表的長度為:%d\n",GetLength(L)); 131 printf("請輸入您要查詢的結點i: "); 132 scanf("%d",&i); 133 GetNode(L,i); 134 printf("第%d個結點的元素為:%d\n",i,GetNode(L,i)); 135 printf("請輸入您要查詢的元素:"); 136 scanf("%d",&j); 137 LocateList(L,j); 138 printf("元素%d位於第%d個結點\n",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結束)\n"); 152 CreatList(A); 153 B=(SeqList*)malloc(sizeof(SeqList)); 154 InitList(B); 155 printf("創建一個順序表B,請輸入順序表B中的元素(以0結束)\n"); 156 CreatList(B); 157 C=(SeqList*)malloc(sizeof(SeqList)); 158 CommElem(A,B,C); 159 printf("A,B的交集為:\n"); 160 PrintList(C); 161 */ 162 return 0; 163 }
順序表上基本運算的實現