第二章作業題2-連結串列-計算機17級 7-3 jmu-ds-單鏈表的基本運算 (15 分)
阿新 • • 發佈:2018-12-12
7-3 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 <iostream> #include <bits/stdc++.h> using namespace std; typedef int Status; typedef char ElemType;//要注意不是int typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; Status ListCreate_L(LinkList &CL) { CL = (LinkList)malloc(sizeof(LNode)); if(!CL) exit(OVERFLOW); LinkList rear = CL; rear->next = NULL; return 1; } Status ListInsert(LinkList &L,int n)//尾部插入法 { LinkList p,rear; rear = L; for(int i =1;i<=n;i++) { p = (LinkList)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); cin>>p->data; p->next = NULL; rear->next = p;//尾部插入 rear = p; } return 1; } void ListPrint(LinkList &L) { LinkList p = L->next;//p指向第一個元素結點 int flag = 1; while(p!=NULL) { if(flag) { cout<<p->data; flag = 0; } else { cout<<" "<<p->data; } p = p->next; } cout<<endl; } Status ListLength(LinkList &L) { LinkList p = L->next; int j = 0; while(p) { p = p->next; j++; } cout<<j<<endl; return j; } Status JudgeEmpty(LinkList &L) { LinkList p = L->next; if(p) return false; else return true; } Status GetElem(LinkList &L,int i,ElemType &e) { LinkList p = L->next; int j = 1; while(p&&j<i) { p = p->next; j++; } if(j>i||!p) return 0; e = p->data; return 1; } Status ListLocate(LinkList &L,ElemType e) { LinkList p = L->next; int j = 1; while(p&&e!=p->data) { p = p->next; j++; } if(!p) return 0; else return j; } Status ListDelete(LinkList &L,int i,ElemType &e) { LinkList p = L->next,q; int j = 1; while(p&&j<i-1) { p = p->next; j++; } if(!p||j>i-1) return 0; q = p->next; p->next = q->next; e = q->data; free(q); return 1; } void ListFree(LinkList &L)//最好自己寫free函式 { LinkList p = L->next; //LinkList rear; //rear = L; while(p) { free(p); //rear = p; p = p->next; } free(p); } Status LinkListInsert(LinkList &L,int pos,ElemType e) { LinkList p = L->next,s; int j = 1; while(p&&j<pos-1) { p = p->next; j++; } if(!p&&j>pos-1) return 0; s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next =p->next; p->next =s; return 1; } int main() { LinkList L; ListCreate_L(L); int n; cout<<L->next<<endl; cin>>n; ListInsert(L,n); ListPrint(L); ListLength(L); if(JudgeEmpty(L)) cout<<"yes"<<endl; else cout<<"no"<<endl; ElemType e; GetElem(L,3,e); cout<<e<<endl; //int posi; cout<<ListLocate(L,'a')<<endl; LinkListInsert(L,4,'x'); ++n; ListPrint(L); ListDelete(L,3,e); --n; ListPrint(L); ListFree(L); return 0; }