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);
}
相關文章
- 連結串列 - 單向連結串列
- 連結串列-單連結串列實現
- 單連結串列
- 單連結串列的建立
- 資料結構-單連結串列、雙連結串列資料結構
- 簡單的單向連結串列
- Java實現單向連結串列基本功能Java
- 單雙連結串列
- 單連結串列建立連結串列出現問題
- 55-將單連結串列原地逆置(有頭結點的單連結串列)
- 單向連結串列的建立
- 6-8 單連結串列結點刪除 (20 分)
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 【連結串列問題】刪除單連結串列的中間節點
- 02-線性結構1 兩個有序連結串列序列的合併 (15分)
- 棧_單向連結串列
- 12.19單向連結串列
- 單連結串列成環
- C++資料結構連結串列的基本操作C++資料結構
- 02-單連結串列的操作
- 單連結串列的排序問題排序
- 基本資料結構實現--單連結串列【含測試程式碼】資料結構
- 單連結串列基本介紹以及按照順序插入節點
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- 單連結串列的逆序輸出 PTA6-1 單連結串列逆轉 為例
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 7-22 jmu-ds-小孩報數問題 (15 分)
- 佇列_單向連結串列佇列
- 單向迴圈連結串列
- 單連結串列學習(一)
- 10單向連結串列(slist)
- Python實現單連結串列Python
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- Flink的DataSet基本運算元總結