길림대학 초성 고급 언어 프로그램 설계 실험 09 동적 데이터 조직
제목: 단일 체인 테이블 만들기
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
키보드에서 무작위로 0으로 끝나는 약간의 비영정수를 입력하여 단일 체인 테이블을 만듭니다.이후 이 체인 테이블에 저장된 숫자를 순서대로 출력하고 인접한 숫자 사이에는 서양어 공백으로 간격을 두고 마지막 숫자 뒤에는 아무런 문자도 없다.빈 체인 테이블의 경우 NULL을 내보냅니다.
예를 들어,
입력: 5 4 2 1 3 0
출력: 5 4 2 1 3
입력: 0 5 4 2 1 3 0
출력:NULL
#include
#include
struct cell{
int x;
struct cell *next;
};
struct cell *build(void){
struct cell *head,*tmp,*p;
head=tmp=p=NULL;
int n;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
p=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&p->x);
tmp->next=p;
tmp=p;
tmp->next=NULL;
}while(p->x!=0);
}
return head;
}
void print(struct cell *head){
struct cell *p;
printf("%d",head->x);
p=head->next;
while(p->x!=0){
printf(" %d",p->x);
p=p->next;
}
}
void release(struct cell*head){
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head;
head = build();
if(head!=NULL)
print(head);
else
printf("NULL");
release(head);
}
2번 제목 번호: Exp09-Basic02, GJBook3-13-06
제목: 단일 체인 테이블 중복 결점 삭제
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
먼저 키보드에 따라 무작위로 입력하고 0으로 끝나는 약간의 비영정수로 단사슬표를 만든다.그리고 이 체인 테이블에서 중복된 결점을 삭제하고 하나만 보존하며 원래의 결점 순서를 바꾸지 않습니다.마지막으로 삭제된 체인 테이블의 각 결점 값을 출력하고 인접한 숫자 사이에는 서양어 공백으로 간격을 두고 마지막 숫자 뒤에는 아무런 문자도 없다.빈 체인 테이블의 경우 NULL을 내보냅니다.
예를 들어,
입력: 5 4 2 1 3 0 출력: 5 4 2 1 3
입력: 4 2 1 3 2 0 출력: 4 2 1 3
입력: 0 4 2 3 2 0 출력: NULL
#include
#include
struct cell{
int x;
struct cell *next;
};
struct cell *build(void){
struct cell *head,*tmp,*p;
head=tmp=p=NULL;
int n;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
p=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&p->x);
tmp->next=p;
tmp=p;
tmp->next=NULL;
}while(p->x!=0);
}
return head;
}
struct cell* del2one(struct cell* head){
struct cell *p,*q,*r;
p=head;
while(p!=NULL){
q=p;
while(q->next!=NULL){
if(q->next->x==p->x){
r=q->next;
q->next=r->next;
}
else{
q=q->next;
}
}
p=p->next;
}
return head;
}
void print(struct cell *head){
struct cell *p;
printf("%d",head->x);
p=head->next;
while(p->x!=0){
printf(" %d",p->x);
p=p->next;
}
}
void release(struct cell*head){
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head;
head = build();
head=del2one(head);
if(head!=NULL)
print(head);
else
printf("NULL");
release(head);
}
여기에서 나는 다른 사람의 코드를 보았는데, 상황이 더욱 복잡하다.https://blog.csdn.net/tao_627/article/details/88687243?utm_source=app3 제목 번호: Exp09-Basic03
제목: 단일 체인 테이블 중간 결점 구하기
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
먼저 키보드에 따라 무작위로 입력하고 0으로 끝나는 약간의 비영정수로 단사슬표를 만든다.
그리고 체인표의 중간 위치에 있는 결점을 찾고 중간 결점이 두 개 있으면 앞의 것을 중간 위치 결점으로 설정한다.
마지막으로 중간 결점부터 체인 테이블 끝까지의 각 결점 값을 출력합니다. 인접한 숫자 사이에는 서양어 공백으로 간격을 두고 마지막 숫자 뒤에는 아무런 문자도 없습니다.
빈 체인 테이블의 경우 NULL을 내보냅니다.
예를 들어,
입력: 5 4 2 1 3 0
출력: 2 1 3
입력: 4 2 1 3 2 0
출력: 1 3 3 2
#include
#include
struct cell{
int x;
struct cell *next;
};
struct cell *build(void){
struct cell *head,*tmp,*p;
head=tmp=p=NULL;
int n;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
p=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&p->x);
tmp->next=p;
tmp=p;
tmp->next=NULL;
}while(p->x!=0);
}
return head;
}
struct cell* mid(struct cell *head){
struct cell *p0,*p;
int n=0,i,j=0;
if(head==NULL)head==NULL;
else{
p=head;
while(p!=NULL){
p=p->next;
n=n+1;
}
j=n/2;
p0=head;
while(j!=1){
p0=p0->next;
j--;
}
head=p0;
}
return head;
}
void print(struct cell *head){
struct cell *p;
printf("%d",head->x);
p=head->next;
while(p->x!=0){
printf(" %d",p->x);
p=p->next;
}
}
void release(struct cell*head){
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head,*half;
head = build();
half = mid(head);
if(half!=NULL)
print(half);
else
printf("NULL");
release(head);
}
4번 제목 번호: Exp09-Basic04
제목: 싱글 체인 테이블 교환 두 결점
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
먼저 키보드에 따라 무작위로 입력하고 0으로 끝나는 약간의 비영정수로 단사슬표를 만든다.
그리고 입력한 두 개의 인덱스 위치에 따라 체인 테이블의 두 결점을 교환한다(체인 테이블의 첫 번째 요소 인덱스는 1이고 교환할 두 개의 인덱스 위치는 서로 인접하지 않는다).
마지막 체인 테이블의 각 결점 값을 출력하고, 인접한 숫자 사이에는 서양어 공백으로 간격을 두고, 마지막 숫자 뒤에는 아무런 문자도 없다.
빈 체인 테이블의 경우 NULL을 내보냅니다.
예를 들어,
입력: 1 2 3 4 5 6 0 1 5
출력: 5 2 3 4 1 6
입력: 0 1 2 3 4 5 6 0 1 5
출력:NULL
#include
#include
struct cell {
//
int x;
struct cell* next;
};
struct cell* build(void) {
// ,
struct cell* head, * tmp, * p;
head = tmp = p = NULL;
int n;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
p=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&p->x);
if(p->x==0)break;
tmp->next=p;
tmp=p;
tmp->next=NULL;
}while(p->x!=0);
}
return head;//
}
struct cell* swap(struct cell* head,int m,int n) {
// m n ,head
if(head==NULL) return NULL;
struct cell* pm=head, * pn=head;
struct cell* pm0 = NULL, * pn0 = NULL;
struct cell* tmp;
int i;
for (i = 1;i < m && pm != NULL;i++) {
pm0 = pm;
pm = pm->next;
}
for (i = 1;i < n && pn != NULL;i++) {
pn0 = pn;
pn = pn->next;
}
if (pm != NULL && pn != NULL && m != n) {
// m,n
if (pm0 != NULL && pn0 != NULL) {
tmp=pm->next;
pm->next=pn->next;
pn->next=tmp;
pm0->next=pn;
pn0->next=pm;
pm=pm0->next;
pn=pn0->next;
}
if (pm0 == NULL && pn0 != NULL) {
head=pn;
tmp=pn->next;
pn->next=pm->next;
pn0->next=pm;
pm->next=tmp;
}
if (pm0 != NULL && pn0 == NULL) {
head=pm;
tmp=pm->next;
pm->next=pn->next;
pm0->next=pn;
pn->next=tmp;
}
}
return head;
}
void print(struct cell* head) {
// ,head
struct cell *p;
printf("%d",head->x);
p=head->next;
while(p!=NULL){
printf(" %d",p->x);
p=p->next;
}
}
void release(struct cell* head) {
// ,head
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head;
int m, n;
head = build();
scanf("%d%d", &m, &n);
head = swap(head,m,n);
if(head!=NULL)
print(head);
else
printf("NULL");
release(head);
}
5번 제목 번호: Exp09-Basic05, GJBook 3번 - 13-04
제목: 단일 체인 메모리 법뢰 시퀀스
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
정정수 n을 정하고 단사슬표로 n 단계 법뢰 서열의 각 값을 점차적으로 저장한다.n 단계 법뢰 서열은 모든 약속할 수 없는 점수 j/i(0
양의 정수 n 입력하기;n 단계 법뢰 서열의 각 분수 형식을 출력하고 분수의 분자와 분모는/연결하며 각 분수는 서양어 빈칸으로 간격을 두고 마지막 숫자는 아무런 문자도 없습니다.만약 빈 체인 테이블이나 n이 요구에 부합되지 않으면 NULL을 출력합니다.
예를 들어,
입력
출력: 0/1 1/3 1/2 2/3 1/1
#include
#include
struct farlei_item {
int numerator, denominator; // 、
struct farlei_item* next; //
};
typedef struct farlei_item* farleipointer;
int gcd(int x, int y) {
/* */
if(y==0)return x;
else return gcd(y,x%y);
}
/* , */
farleipointer farlei(int n) {
int i, j;
farleipointer fn, r, r0, p;
fn = r = r0 = p = NULL;
if (n < 1)return NULL; // n<=0,
fn = (farleipointer)malloc(sizeof(struct farlei_item)); // 0/1
fn->numerator = 0;
fn->denominator = 1;
p = (farleipointer)malloc(sizeof(struct farlei_item)); // 1/1
p->numerator = 1;
p->denominator = 1;
fn->next = p;
p->next = NULL;
for(i=2;i<=n;i++){
for(j=1;j<i;j++){
if(gcd(i,j)==1){
r=fn;
while(j*(r->denominator)>i*(r->numerator)){
r0=r;
r=r->next;
}
p=(farleipointer)malloc(sizeof(struct farlei_item));
p->numerator=j;
p->denominator=i;
p->next=r;
r0->next=p;
}
}
}
return fn;
}
void print(farleipointer fn) {
// fn
farleipointer p;
printf("%d/%d",fn->numerator,fn->denominator);
p=fn->next;
while(p!=NULL){
printf(" %d/%d",p->numerator,p->denominator);
p=p->next;
}
}
void release(farleipointer head) {
// ,head
farleipointer p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
int n;
farleipointer fn;
scanf("%d", &n);
fn = farlei(n); // n
if(fn!=NULL)
print(fn);
else
printf("NULL");
release(fn);
return 0;
}
교과서 예제
6번 제목 번호: Exp09-Enhance01
제목: 싱글 체인 테이블 끝에서 K번째 결점
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
, 0 ;
K, K , , ;
NULL。
예를 들어,
:1 2 3 4 5 6 7 8 0 3
:6
:0 2 3 4 5 6 7 8 0 3
:NULL
#include
#include
struct cell {
//
int x;
struct cell* next;
};
struct cell* build(void) {
// ,
struct cell* head, * tmp, * p;
head = tmp = p = NULL;
int n;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
p=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&p->x);
if(p->x==0)break;
tmp->next=p;
tmp=p;
tmp->next=NULL;
}while(p->x!=0);
}
return head;//
}
struct cell * back(struct cell* head, int k) {
// k ,head
struct cell *p,*p0;
int n=1,i;
if(head==NULL)head=NULL;
else{
p=head;
while(p->next!=NULL){
n++;
p=p->next;
}
if(k>n){
head=NULL;return head;
}
n=n-k;
p0=head;
for(i=n;i>0;i--){
p0=p0->next;
}
head=p0;
p0->next=NULL;
}
return head;
}
void release(struct cell* head) {
// ,head
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head,*result;
int k;
head = build();
scanf("%d", &k);
result = back(head,k);
if (result != NULL)
printf("%d",result->x);
else
printf("NULL");
release(head);
}
7 제목 번호: Exp09-Enhance03
제목: 통합 단일 체인 테이블
제목 설명: 다음 기능을 수행하려면 누락된 코드를 입력하여 프로그램을 완성하십시오.
0 , , ;
, ;
, ;
, , 。 , NULL。
예를 들어,
:2 3 4 4 5 6 0 1 3 4 6 7 0
:1 2 3 3 4 4 4 5 6 6 7
:0 0
:NULL
#include
#include
struct cell {
//
int x;
struct cell* next;
};
struct cell* build(void) {
// ,
struct cell* head, * tmp, * tail;
head = tmp = tail = NULL;
int n, i;
head=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&head->x);
tmp=head;
tmp->next=NULL;
if(head->x==0)head=NULL;
else{
do{
tail=(struct cell*)malloc(sizeof(struct cell));
scanf("%d",&tail->x);
if(tail->x==0)break;
tmp->next=tail;
tmp=tail;
tmp->next=NULL;
}while(tail->x!=0);
}
return head;//
}
struct cell* combine(struct cell* p, struct cell* q) {
// p q
struct cell* head= NULL,*p0=NULL,*q0=NULL,*r=NULL;
if (p == NULL && q!= NULL) return q;
if (p != NULL && q == NULL) return p;
if (p == NULL && q == NULL) return NULL;
if(p!=NULL&&q!=NULL){
head=p;
while(head->next!=NULL){
head=head->next;
}
head->next=q;
return p;
}
}
void print(struct cell* head) {
// ,head
struct cell *p,*p0,*r,*r0,*q;
struct cell *k;
p0=NULL;
p=head;
while(p!=NULL){
r=head;
while((r->x<p->x)&&r!=p){
r0=r;
r=r->next;
}
if(r!=p){
q=p;
p0->next=p->next;
p=p0;
if(r==head){
q->next=head;
head=q;
}else{
q->next=r;
r0->next=q;
}
}
p0=p;
p=p->next;
}
printf("%d",head->x);
k=head->next;
while(k!=NULL){
printf(" %d",k->x);
k=k->next;
}
}
void release(struct cell* head) {
// ,head
struct cell *p;
while(head!=NULL){
p=head;
head=p->next;
free(p);
}
}
int main(void) {
struct cell* head1,*head2, *result;
head1 = build();
head2 = build();
result = combine(head1,head2);
if (result != NULL)
print(result);
else
printf("NULL");
release(result);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
static 간단한 설명static 방법은 일반적으로 정적 방법이라고 부른다. 정적 방법은 어떠한 대상에 의존하지 않고 접근할 수 있기 때문에 정적 방법에 있어this는 없다. 왜냐하면 그 어떠한 대상에도 의존하지 않기 때문이다. 대상이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.