링크 스 택 대기 열

39299 단어 데이터 구조
체인 테이블
주어진 단일 체인 헤더 노드 를 설명 하고 링크 의 마지막 k 번 째 노드 를 삭제 합 니 다.각 그룹의 데 이 터 를 입력 하면 2 줄 이 있 습 니 다. 첫 번 째 줄 에 두 개의 정수 K 가 있 고 N 은 N 개의 데이터 가 있 음 을 표시 합 니 다. 마지막 K 개의 데 이 터 를 삭제 하 십시오. 두 번 째 줄 에 N 개의 데 이 터 를 포함 하고 모든 데이터 사이 에 빈 칸 이 포함 되 어 있 습 니 다.EOF 로 끝내다.출력 이 삭 제 된 링크 요 소 는 데이터 사이 에 빈 칸 을 포함 합 니 다.삭제 후 링크 가 비어 있 으 면 빈 줄 을 출력 합 니 다.샘플 입력 1, 3, 1, 2, 3 샘플 출력 12
문제 풀이: 링크 의 사용, 기록
#include
#include

typedef struct node{
    int data;
    struct node* next;
}node;

node *creat(int n){
    node *p = (node *)malloc(sizeof (node));
    p->next = NULL;
    node *head = p;
    int i;
    for( i=0; i<n; i++){
        p->next = (node *)malloc(sizeof (node));
        p = p->next;
        scanf("%d",&p->data);
    }
    p->next = NULL;
    return head;
}

void print(node* head){
    head = head -> next;
    int flag = 0;
    while(head!=NULL){
        if(flag) printf(" ");
        flag = 1;
        printf("%d",head->data),head = head->next;
    }
    printf("
"
); } void Delate(node *head,int n,int k){ int i; for(i=0; i < (n-k); i++) head = head->next; node *p = head->next->next; head->next = p; } void Free(node *head){ while(head != NULL){ node *p = head; head = head->next; free(p); } } int main(){ int k,n; while(scanf("%d%d",&k,&n)!=EOF){ node *head = creat(n); Delate(head,n,k); print(head); Free(head); } }

창고.
#include
#include
#include

#define Elemtype int

typedef struct SqStack{
    int size;
    int top;
    Elemtype *base;
}SqStack;

void InitStack(SqStack *s)
{
    s->size = 500;
    s->base = (Elemtype*)malloc(sizeof(Elemtype)*s->size);
    s->top = -1;
}

void Destroy(SqStack *s)
{
	free(s->base);
}

void Push(SqStack *s,int x){
    if(s->top == -1){
        s->base[0] = x;
        s->top = 1;
    }
    else{
        int i;
        for(i = s->top; i > 0; i--)
            s->base[i] = s->base[i-1];
        s->base[0] = x;
        s->top++;
    }
}

int GetTop(SqStack s,int *x){
    if(s.top == -1) return 0;
    else{
        *x = s.base[0];
        return 1;
    }
}

int Pop(SqStack *s,int *x){
    if(s->top == -1) return 0;
    else{
        s->top--;
        *x = s->base[0];
        int i;
        for(i=0; i < s->top ;i++)
            s->base[i] = s->base[i+1];
        if(s->top == 0) s->top = -1;
        return 1;
    }
}
int main()
{
	SqStack s;
	InitStack(&s);
	char cmd[10];
	int x, res;
	while(scanf("%s", cmd)!=EOF)
	{
		if(strcmp(cmd, "push")==0)
		{
			scanf("%d", &x);
			Push(&s, x);
		}
		else if(strcmp(cmd, "top")==0)
		{
			res = GetTop(s, &x);
			if(res==0)
				printf("EMPTY
"
); else printf("%d
"
, x); } else { res = Pop(&s, &x); if(res==0) printf("EMPTY
"
); else printf("%d
"
, x); } } Destroy(&s); return 0; }

대열
#include
#include
#include

typedef struct SqQueue{
    int *data;
    int cap;
    int size;
}SqQueue;

void Destroy(SqQueue* q)
{
	free(q->data);
}

void InitQueue(SqQueue* q){
    q->cap = 1005;
    q->size = 0;
    q->data = (int *)malloc(sizeof (int) * q->cap);
}

void EnQueue(SqQueue* q,int x){
    q->data[q->size++] = x;
}

int Empty(SqQueue* q){
    if(q->size == 0) return 1;
    return 0;
}

int Front(SqQueue* q){
    return q->data[0];
}

int Back(SqQueue* q){
    return q->data[q->size-1];
}

int DeQueue(SqQueue* q){
    int x = q->data[0],i;
    for(i = 0; i < q->size-1; i++)
        q->data[i] = q->data[i+1];
    q->size--;

    return x;
}
int main()
{
	SqQueue q;
	InitQueue(&q);
	char cmd[10];
	int x, res;
	while(scanf("%s", cmd)!=EOF)
	{
		if(strcmp(cmd, "enq")==0)
		{
			scanf("%d", &x);
			EnQueue(&q, x);
		}
		else if(strcmp(cmd, "front")==0)
		{
			if(Empty(&q))
				printf("EMPTY
"
); else printf("%d
"
, Front(&q)); } else if(strcmp(cmd, "back")==0) { if(Empty(&q)) printf("EMPTY
"
); else printf("%d
"
, Back(&q)); } else { if(Empty(&q)) printf("EMPTY
"
); else printf("%d
"
, DeQueue(&q)); } } Destroy(&q); return 0; }

좋은 웹페이지 즐겨찾기