|
- #include <stdio.h>
- #include <stdlib.h>
- // 線(xiàn)性表的順序存儲(chǔ)結(jié)構(gòu)
- #define ListSize 100
- typedef char DataType;
- typedef struct{
- DataType data[ListSize];
- int length;
- }SeqList;
- SeqList mylist;//global value
- //在指定位置插入元素
- void InsertList(SeqList *L,int pos,DataType val)
- {
- int i,q=0;
- if(pos<1 || pos>L->length+1) // 假如順序表為 1,2,3,4,5,可以插入的位置是1,2,3,4,5,6
- {
- printf("position error\n");
- return;
- }
- if(L->length>=ListSize){ //當(dāng)length=ListSize時(shí),表示順序表已滿(mǎn)
- printf("overflow\n");
- return;
- }
-
- for( i=L->length ;i>=pos;i--){ //當(dāng)i的位置為1——length+1時(shí)需要移動(dòng)length-i+1
- L->data[i]=L->data[i-1];
- q++;
- }
- L->data[pos-1]=val;
- printf("循環(huán)體執(zhí)行了%d次,理論上計(jì)算值為n-i+1次%d\n",q,L->length-pos+1);
- L->length ++;
- printf("在順序表中插入新的元素%c在表中%d的位置",val,pos);
-
- }
- DataType DeleteList(SeqList *L,int pos)//在順序表L中第i個(gè)位置之前插入一個(gè)新的元素下
- {
- int i,q=0;
- DataType x;
- if(pos<1 || pos>L->length)
- {
- printf("position error\n");
- exit (0); //程序非正常退出,并給一個(gè)統(tǒng)一的返回值0,在stdlib.h中有定義
- }
- x=L->data[pos-1];
- /* for(i=pos-1;i+1<L->length ;i++){
- q++;
- L->data[i]=L->data[i+1];
-
- }
- */
-
- for(i=pos;i<L->length;i++) {
- q++;
- L->data[i-1]=L->data[i];
- }
-
- L->length --;
- printf("表中位置%d的元素%c已經(jīng)被刪除了\n",pos,x);
- printf("循環(huán)體執(zhí)行了%d次,理論上計(jì)算值為n-i次%d\n",q,L->length+1-pos);
- return x;
- }
- void PrintList(SeqList *L) //打印輸出順序表
- {
- int i;
- for(i=0;i<L->length;i++){
- printf("%c,",L->data[i]);
- }
- printf("\n");
- }
- //創(chuàng)建一個(gè)順序表
- CreateList(SeqList *L)
- {
- int i=0;
- L->length=0;
- char ch;
- ch=getchar();
- printf("創(chuàng)建的順序表如下:");
- while(ch!='\n'){
- L->data[i]=ch;
-
- L->length++;
-
- ch=getchar();
- printf("%c,",L->data[i]);
- i++;
- }
- printf("表長(zhǎng)length=n=%d\n",L->length);
- }
- //順序表逆置
- void Converts(SeqList *L){
- int i;
- DataType temp;
- for(i=0;i<L->length/2;i++)
- {
- temp=L->data[i];
- L->data[i]=L->data[L->length-1-i];
- L->data[L->length-1-i]=temp;
-
- }
- return;
- }
- void MaxMin(SeqList *L,DataType*max,DataType *min,int *k,int *j){
- int i;
- *max=L->data[0];*min=L->data[0];
- *k=*j=0;
- for(i=1;i<L->length;i++) {
- if(L->data[i]>*max){
- *max=L->data[i];*k=i;
- }
-
- else if (L->data[i]<*min){
- *min=L->data[i];*j=i;
- }
-
- }
- }
- int main()
- {
-
- int max=0,min=0,k=0,j=0;
-
-
- CreateList(&mylist);
- InsertList(&mylist,9,'A');
- PrintList(&mylist);
- DeleteList(&mylist,9);
- PrintList(&mylist);
- Converts(&mylist);
- PrintList(&mylist);
- MaxMin(&mylist,&max,&min,&k,&j);
- printf("max=%c,min=%c,k=%d,j=%d",max,min,k,j);
- return 0;
- }
復(fù)制代碼
|
|