1. 程式人生 > >《資料結構實驗2》--線性表

《資料結構實驗2》--線性表

一、實驗目的

1. 會定義線性表的順序儲存結構。

2熟悉對順序表的一些基本操作和具體的函式定義。

二、實驗內容

a.  以輸入整形資料為主,輸入後按“?”結束輸入。

b.  程式所能表達到的功能為:實現順序表的建立、查詢、插入、刪除等功能。

c.   程式執行後,輸入資料並執行。

程式碼:

#include<stdio.h>
#include<conio.h>
#define MaxSize 50
typedef char elemtype;
typedef struct node
{
    elemtype data[MaxSize];
    int len;
} lnode,*List;
void init(List L)
{
    L->len=0;
}
int length(List L)
{
    return L->len;
}
elemtype getnode(List L,int pos)
{
    if(pos<1 || pos>L->len) printf("error");
    else return L->data[pos-1];
}
int locate(List L,elemtype x)
{
    int i=0;
    while(i<L->len && L->data[i]!=x) i++;
    if(i==L->len) return -1;
    else return(i+1);
}
void insert(List L,int pos,elemtype x)//插入
{
    int j;
    if(pos<1 || pos>L->len+1) printf("insert error\n");
    else
    {
        L->len++;
        for(j=L->len; j>=pos; j--)      L->data[j]=L->data[j-1];
        L->data[pos-1]=x;
    };
}
void delnode(List L,int pos)//刪除
{
    int j;
    if(pos<1 ||pos>L->len)printf("del error\n");
    else
    {
        for(j=pos; j<L->len; j++)
            L->data[j-1]=L->data[j];
        L->len--;
    }
}
void print(List L)//列印
{
    int i;
    for(i=1; i<L->len; i++)
        printf("%c->",L->data[i-1]);
    printf("%c",L->data[L->len-1]);
}
main()
{
    int i=1,n;
    lnode L;
    char ch,x;
    init(&L);
    printf("\n\n\n          **************** 順序表演示程式***********\n");
    printf("                請輸入你想建立的順序表的元素,以?結束:");
    ch=getchar();
    while(ch!='?')
    {
        insert(&L,i,ch);
        i++;
        ch=getchar();
    };
    printf("你建立的順序表為:");
    print(&L);
    printf("\n順序表的長度為:%d",L.len);
    printf("\n輸入你想查詢的元素:");
    fflush(stdin);////清空輸入緩衝區,通常是為了確保不影響後面的資料讀取
    scanf("%c",&x);
    printf("你查詢的元素為%c序位為%d",x,locate(&L,x));
    printf("\n輸入你想查詢的元素序位:");
    scanf("%d",&n);
    printf("\n你查詢的元素為:%c",getnode(&L,n));
    printf("\n輸入你想插入的元素以及序位:<用逗號隔開>");
    fflush(stdin);////清空輸入緩衝區,通常是為了確保不影響後面的資料讀取
    scanf("%c,%d",&x,&n);
    insert(&L,n,x);
    printf("\n插入後順序表為:");
    print(&L);
    fflush(stdin);  //清空輸入緩衝區,通常是為了確保不影響後面的資料讀取
    printf("\n請輸入你想刪除的元素序位:");
    scanf("%d",&n);
    delnode(&L,n);
    printf("\n刪除後的順序表為:");
    print(&L);
    getchar();
}

執行: