迴圈單鏈表區間刪除(函式)
阿新 • • 發佈:2018-12-10
6-1 迴圈單鏈表區間刪除(15 分)
本題要求實現帶頭結點的迴圈單鏈表的建立和單鏈表的區間刪除。L是一個帶頭結點的迴圈單鏈表,函式ListCreate_CL用於建立一個迴圈單鏈表,函式ListDelete_CL用於刪除取值大於min小於max的連結串列元素。
函式介面定義:
Status ListCreate_CL(LinkList &CL);
void ListDelete_CL(LinkList &CL,ElemType min,ElemType max);
裁判測試程式樣例:
//庫函式標頭檔案包含 #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; } /* 請在這裡填寫答案 */
輸入格式: 第一行輸入一個整數n,表示迴圈單鏈表中元素個數,接下來一行共n個整數,中間用空格隔開。第三行輸入min和max。
輸出格式: 輸出刪除後迴圈連結串列的各個元素,兩個元素之間用空格隔開,最後一個元素後面沒有空格。
輸入樣例:
6
1 2 3 4 5 6
2 5
輸出樣例:
1 2 5 6
Status ListCreate_CL(LinkList &CL) { CL= (LinkList)malloc(sizeof (LinkList)); CL -> next = CL; LinkList p = CL; //p 定位在最後一個元素上 LinkList t; int n; scanf("%d",&n); if(n<0) return FALSE; for(int i=0; i<n; i++) { int x; scanf("%d",&x); t = (LinkList)malloc( sizeof (LinkList)); t->data=x; t->next= CL; p->next =t; p = t; } return OK; } void ListDelete_CL(LinkList &CL,ElemType min,ElemType max) { LinkList p = CL; if(p->next == CL||min==max) return ; LinkList t; while(p->next!=CL) { t = p->next; while(t->data>min&&t->data<max) t=t->next; p->next =t; p=t; } return; }