7 - 3 jmu - ds - 싱글 체인 시트 의 기본 연산

9313 단어 데이터 구조
단일 체인 표 의 기본 연산 실현: 초기 화, 삽입, 삭제, 표 의 길이, 판 공, 방출.(1) 단일 링크 L, 출력 L - > next 의 값 을 초기 화 합 니 다.(2) 순서대로 꼬리 삽입 법 으로 요 소 를 삽입 합 니 다. 두 줄 로 나 누 는 데 이 터 를 입력 하고 첫 번 째 줄 은 꼬리 삽입 법 이 삽입 해 야 할 문자 데이터 의 개수 이 며 두 번 째 줄 은 구체 적 으로 삽 입 된 문자 데이터 입 니 다.(3) 단일 링크 L 출력;(4) 출력 싱글 체인 테이블 L 의 길이;(5) 싱글 체인 테이블 L 이 비어 있 는 지 판단 하기;(6) 단일 링크 L 의 세 번 째 요 소 를 출력 합 니 다.(7) 출력 요소 a 의 위치;(8) 네 번 째 요소 위치 에 'x' 요 소 를 삽입 합 니 다.(9) 단일 링크 L 출력;(10) L 의 세 번 째 요 소 를 삭제 합 니 다.(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
#include
#include
#include
using namespace std;

typedef char ElemType;
typedef struct LNode{
    struct LNode * next;
    ElemType data;
}LNode, *Linklist;
typedef int status;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
status  InitList(Linklist & L);
status  InputList(Linklist & L, int len);
void    PrintList(Linklist L);
status  ListEmpty(Linklist L);
status  GetElem_L(Linklist L,int i,ElemType & e);
int     LocatElem_L(Linklist L,ElemType e);
status  InsertList(Linklist & L,int i,ElemType e);
status  DeleteList(Linklist & L,int i,ElemType&  e);

int main()
{
    Linklist L;
    InitList(L);
    int n;
    scanf("%d",&n);
    printf("%d
"
,L->next); InputList(L,n); PrintList(L); int length = n; printf("%d
"
,length); if(ListEmpty(L)) printf("no
"
); else printf("yes
"
); ElemType e; GetElem_L(L,3,e); printf("%c
"
,e); int posi; cout << LocatElem_L(L,'a') << endl; InsertList(L, 4, 'x'); ++n; PrintList(L); DeleteList(L,3,e); --n; PrintList(L); free(L); return 0; } // status InitList(Linklist & L) { LNode * temp; temp = (LNode* )malloc(sizeof(LNode)); if(!temp) exit(OVERFLOW); L = temp; L->next = NULL; return OK; } // ( ) status InputList(Linklist & L, int n) { LNode * curPtr, * rearPtr; rearPtr = L; // ,rearPtr for (int i = 1;i <= n;i ++){ // , curPtr = (LNode*)malloc(sizeof(LNode));// if(!curPtr) exit(OVERFLOW); scanf(" %c",&curPtr->data);// curPtr->next = NULL; // next rearPtr->next = curPtr; rearPtr = curPtr; } return OK; } // void PrintList(Linklist L) { LNode* curPtr; curPtr = L->next; while(curPtr != NULL) { if(L->next == curPtr) printf("%c",curPtr->data); else printf(" %c",curPtr->data); curPtr = curPtr->next; } printf("
"
); } // status ListEmpty(Linklist L) { if(L->next) return TRUE; else return FALSE; } // i status GetElem_L(Linklist L,int i,ElemType & e) { LNode* p; p = L->next; int j = 1; while(p && j < i) { p = p->next; ++j; } if(!p || j > i) return ERROR; e = p->data; return OK; } // e int LocatElem_L(Linklist L, ElemType e) { LNode* p; p = L->next; int j = 1; while(p && e != p->data) { p = p->next; j++; } if(p) return j; else return 0; } // i e status InsertList(Linklist &L, int i, ElemType e) { LNode * p; p = L->next; int j = 1; while(p && j < i-1) { p = p->next; ++j; } if(!p || j > i-1) return ERROR; LNode* temp; temp = (LNode* )malloc (sizeof(LNode)); if(!temp) exit(OVERFLOW); temp->data = e; temp->next = p->next; p->next = temp; return OK; } // i status DeleteList(Linklist & L,int i,ElemType & e) { LNode * p,*q; p = L->next; int j = 1; while(p && j < i-1) { p = p->next; ++j; } if(p && j > i-1) return ERROR; q = p->next->next; free(p->next); p->next = q; return OK; }

좋은 웹페이지 즐겨찾기