7-23 jmu-ds-單連結串列的基本運算 (15 分)

明日可7發表於2018-09-21

題目:

實現單連結串列的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。
(1)初始化單連結串列L,輸出L->next的值;
(2)依次採用尾插法插入元素:輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體插入的字元資料。
(3)輸出單連結串列L;
(4)輸出單連結串列L的長度;
(5)判斷單連結串列L是否為空;
(6)輸出單連結串列L的第3個元素;
(7)輸出元素a的位置;
(8)在第4個元素位置上插入‘x’元素;
(9)輸出單連結串列L;
(10)刪除L的第3個元素;
(11)輸出單連結串列L;
(12)釋放單連結串列L。

輸入格式:

兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體插入的字元資料。

輸出格式:

按照題目要求輸出

輸入樣例:

5
a b c d e

輸出樣例:

0
a b c d e
5
no
c
1
a b c x d e
a b x d e

程式碼:

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define LIST_INIT_SIZE 100000
#define LISTINCREMENT 10
#define mod 256
#define lowbit(x) (x&(-x))
#define mem(a,b) memset(a,b,sizeof(a))
#define FRER() freopen("in.txt","r",stdin);
#define FREW() freopen("out.txt","w",stdout);
using namespace std;
const int maxn = 100000 + 7;
char s[maxn];
int n;
typedef struct LNode{
    char c;
    struct LNode* next;
}LNode,*LinkList;
void InitList(LinkList &L){
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    printf("0\n");
}
void CreateList(LinkList L){
    for(int i=n-1;i>=0;--i){
        LinkList p = (LinkList)malloc(sizeof(LNode));
        p->c = s[i];
        p->next = L->next;
        L->next = p;
    }
}
void print(LinkList L){
    LinkList p = L->next;
    int i = 0;
    while(p!=NULL){
        if(i++) printf(" ");
        printf("%c",p->c);
        p = p->next;
    }
    printf("\n");
}
int GetLinkListLength(LinkList L){
    int ans = 0;
    LinkList p = L;
    while(p->next!=NULL){
        p = p->next;
        ans++;
    }
    return  ans;
}
char GetElem(LinkList L,int pos){
    int ans = 1;
    LinkList p = L->next;
    while(p&&ans<pos){
        p = p->next;
        ans++;
    }
    return  p->c;
}
int GetPos(LinkList L,char a){
    int ans = 1;
    LinkList p = L->next;
    while(p&&p->c!=a){ p = p->next;ans++;}
    return  ans;
}
void LinkListInsrt(LinkList L,int pos,char a){
    LinkList p,q;
    p = L;
    q = (LinkList)malloc(sizeof(LNode));
    q->c = a;
    int ans = 1;
    while(p->next&&ans<pos){
        ans++;
        p = p->next;
    }
    q->next = p->next;
    p->next = q;
}
void ListDstroy(LinkList&L){
    LinkList p = L;
    LinkList q;
    while(p->next){
        q = p->next;
        p->next = q->next;
        free(q);
    }
    free(L);
}
void LinkListDelete(LinkList L,int pos){
    LinkList p = L;
    int ans = 1;
    while(p->next&&ans<pos){
        ans++;
        p = p->next;
    }
    LinkList q = p->next;
    p->next = p->next->next;
    free(q);
}
bool IsEmpty(LinkList L){
    if(L->next==NULL) return  true;
    return  false;
}
int main(){
    LinkList L;
    InitList(L);
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf(" %c",&s[i]);
    }
    CreateList(L);
    print(L);
    cout<<GetLinkListLength(L)<<endl;
    printf("%s\n",IsEmpty(L)?"yes":"no");
    printf("%c\n",GetElem(L,3));
    printf("%d\n",GetPos(L, 'a'));
    LinkListInsrt(L, 4, 'x');
    print(L);
    LinkListDelete(L, 3);
    print(L);
    ListDstroy(L);
}

 

相關文章