링크 스 택 대기 열
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.