道德1984


私信TA

用户名:18285361435

访问量:5352

签 名:

等  级
排  名 1724
经  验 2685
参赛次数 0
文章发表 21
年  龄 0
在职情况 学生
学  校 gzsxy
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//结构体定义 
typedef struct node{
	int data;
	struct node *next;
}node,*List;

//判断是否申请成功
void isOk(List L){
	if (L == NULL){
		printf("申请失败");
		exit(0);
	}
}

//创建函数(尾插法),输出结果逆序
List LinkedListCreatT(int n,int *len){
	//初始化头结点 
	node *L;
	L = (node *)malloc(sizeof(node));
	L->next = NULL;
	isOk(L);
	
	*len = n;
	int x;
	for (int i=0;i<n;i++){
		scanf("%d",&x);
		node *p;
		p = (node *)malloc(sizeof(node));
		isOk(p);
		p->data = x;
		p->next = L->next;
		L->next = p;	
//		printf("%p ",p);
	}
//	printf("%p ",L);
	return L;
}

//删除
List LinkedDelete(List L,int x,int *len){
	if (x < 0 || x > *len){
		printf("delete fail\n");
	}else{
		if (L->next == NULL){
		printf("Link list is empty\n");
		}else{
			node *p,*pre;
			if (x==1){
				p = L->next;
				L->next = p->next;
				free(p);
				printf("delete OK\n");
				(*len)--;
				return L;
			}else{
				p = L->next; 
				for (int temp = 1;temp<x;temp++){
					pre = p;
					p = p->next;
				}
				pre->next = p->next;
				free(p);
				printf("delete OK\n");
				(*len)--;
				return L;
			}
		}
	}
	return L;
}

//插入
void LinkedListInsert(List L,int x,int k,int *len){
	if (x < 0 || x > *len+1){
		printf("insert fail\n");
	}else{
		node *pre;
		pre = L;
		for (int temp=1;temp<x;temp++){
			pre = pre->next;
		}
		
		node *p;
		p = (node *)malloc(sizeof(node));
		isOk(p);
		p->data = k;
		p->next = pre->next;
		pre->next = p;
		(*len)++;
		printf("insert OK\n");
	}
}

//获取第a个元素
void LinkedListGet(List L,int x){
	if (L->next == NULL){
		printf("Link list is empty\n");
	}else{
		node *p;
		p = L;
		for (int temp=1;temp<=x;temp++){
			p = p->next;
		}
		printf("%d\n",p->data);
	}
} 

//显示链表 
void show(List L){
	if (L->next == NULL){
		printf("Link list is empty\n");
	}else{
		node *p;
		p = L->next;
		while(p){
			printf("%d ",p->data);
			p = p->next;
		}
		printf("\n");
	}	
}

//主函数 
int main(){
	List list;
	int len;
	int n;
	scanf("%d",&n);
	list = LinkedListCreatT(n,&len);
	int m;
	scanf("%d",&m);
	for (int i=0;i<m;i++){
		char order[7];
		scanf("%s",&order);
		if (strcmp(order,"show") == 0){
			show(list);
		}
		else if (strcmp(order,"delete") == 0){
			int k;
			scanf("%d",&k);
			list = LinkedDelete(list,k,&len);
		}
		else if (strcmp(order,"insert") == 0){
			int y,u;
			scanf("%d%d",&y,&u);
			LinkedListInsert(list,y,u,&len);
		}
		else if (!strcmp(order,"get")){
			int r;
			scanf("%d",&r);
			LinkedListGet(list,r);
		}
	}
	return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »