PTA 6-1 迴圈單鏈表區間刪除(15 分)
阿新 • • 發佈:2018-12-24
本題要求實現帶頭結點的迴圈單鏈表的建立和單鏈表的區間刪除。L是一個帶頭結點的迴圈單鏈表,函式ListCreate_CL用於建立一個迴圈單鏈表,函式ListDelete_CL用於刪除取值大於min小於max的連結串列元素。
函式介面定義:
Status ListCreate_CL(LinkList &CL);
函式介面定義:
Status ListCreate_CL(LinkList &CL);
//庫函式標頭檔案包含 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //函式狀態碼定義 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; //假設線性表中的元素均為整型 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; //迴圈單鏈表型別定義與單鏈表定義相同,區別在尾節點next取值 Status ListCreate_CL(LinkList &CL); void ListDelete_CL(LinkList &CL, ElemType min, ElemType max); void ListPrint_CL(LinkList &CL) { //輸出單鏈表,空表時輸出Empty List。 LNode *p=CL->next; //p指向第一個元素結點 if(p==CL){ printf("Empty List"); return; } while(p!=CL) { if(p->next!=CL) printf("%d ",p->data); else printf("%d",p->data); p=p->next; } } int main() { LinkList CL; ElemType min,max; if(ListCreate_CL(CL)!= OK) { printf("迴圈連結串列建立失敗!!!\n"); return -1; } scanf("%d%d",&min,&max); ListDelete_CL(CL,min,max); ListPrint_CL(CL); return 0; } /* 請在這裡填寫答案 */ Status ListCreate_CL(LinkList &CL) { int n, s; scanf("%d", &n); LNode *cur, *p; CL = (LNode*)malloc(sizeof(LNode)); if(!CL) exit(OVERFLOW); //如果連結串列開闢失敗 CL->next = NULL; cur = CL; if(n==0) CL->next =CL; else { for(int i = 0; i<n; i++) { p = (LNode*)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); scanf("%d", &s); p->data = s; p->next=NULL; cur->next=p; cur = p; //rear的next指標永遠指向cur } p->next = CL; } return OK; } void ListDelete_CL(LinkList &CL,ElemType min,ElemType max) { LNode *p, *q; p = CL; while(p->next != CL) { q = p->next; if(q->data > min && q->data < max) { p->next = q->next; free(q); } else p=p->next; } }