線性表—— jmu-ds-單鏈表的基本運算
阿新 • • 發佈:2018-12-17
實現單鏈表的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。
(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 <cstdio> #include <iostream> #include <cstring> #include <string> #include <malloc.h> #include <math.h> using namespace std; typedef char ElemType; typedef struct LNode{ ElemType data; LNode *next; }LNode, *Linklist; void Init(Linklist &L) { LNode *tmp; tmp = (Linklist)malloc(sizeof(LNode)); tmp->next = NULL; //printf("11111111111\n", tmp->next); L = tmp; } void Insert(Linklist &L) { int n; char c; scanf("%d", &n); LNode *tmp, *p; tmp=L; //getchar(); for(int i = 0; i < n; ++i) { getchar(); p = (Linklist)malloc(sizeof(LNode)); scanf("%c", &p->data); p->next = NULL; tmp->next = p; tmp = p; } } void print(Linklist L) { int flag = 0; LNode *tmp = L->next; while(tmp != NULL) { if(flag) printf(" "); flag = 1; printf("%c", tmp->data); tmp = tmp->next; } printf("\n"); } int count(Linklist L) { LNode *tmp = L; int cnt = 0; while(tmp->next != NULL) { tmp = tmp->next; cnt++; } return cnt; } void printCount(Linklist L, int n) { LNode *tmp = L; for(int cnt = 0; cnt < n; ++cnt) { tmp = tmp->next; } printf("%c\n", tmp->data); } void Locate(Linklist &L, char c) { int cnt = 1; LNode *tmp = L->next; while(tmp->data != c) { tmp = tmp->next; cnt++; } printf("%d\n", cnt); } void Insert(Linklist &L, char c, int loc) { LNode *tmp = L; LNode *p = (Linklist)malloc(sizeof(LNode)); for(int i = 1; i < loc; ++i) tmp = tmp->next; p->next = tmp->next; p->data = c; tmp->next = p; } void deleteLoc(Linklist &L, int cnt) { LNode *tmp = L, *p; for(int i = 1; i < cnt; ++i) tmp = tmp->next; p = tmp->next; tmp->next = p->next; free(p); } void release(Linklist &L) { LNode *tmp = L, *p; while(tmp != NULL) { p = tmp; tmp = tmp->next; free(p); } } int main() { Linklist L; Init(L); printf("%d\n", L->next); Insert(L); print(L); printf("%d\n", count(L)); if(count(L)) printf("no\n"); else printf("yes\n"); printCount(L, 3); Locate(L, 'a'); Insert(L, 'x', 4); print(L); deleteLoc(L, 3); print(L); release(L); }