7-23 jmu-ds-单链表的基本运算 (15 分)

题目:

实现单链表的基本运算:初始化、插入、删除、求表的长度、判空、释放。
(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);
}

猜你喜欢

转载自blog.csdn.net/Insist_77/article/details/82799289