数据结构(C语言版)第三版 基础实验二

1、编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。
并构造测试用例进行测试。

2、假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储,
请设计算法函数linklist reverse1(linklist  head)和
void reverse2(linklist *head)将不带头结点的单链表head就地倒置,
使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。

3、假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),
将值为x的结点插入到链表head中,并保持链表有序性。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。

4、编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。

不带头结点的链表结构定义及头插法建表,尾插法建表和打印链表等函数定义

#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct link_node
{
	datatype info;
	struct link_node *next;
}node;
typedef node *link_list;
link_list creatbystack()/*头插法建立一个单链表*/
{
	link_list head, s;
	datatype x;
	head = NULL;
	printf("请输入若干整数序列:\n");
	scanf_s("%d", &x);
	while (x != 0)/*以0结束输入*/
	{
		s = (link_list)malloc(sizeof(node));
		s->info = x;
		s->next = head;/*/将新结点插入到单链表最前面*/
		head = s;
		scanf_s("%d", &x);
	}
	return head;/*返回建立的新链表*/
}
link_list creatbyqueue()/*尾插法建立单链表*/
{
	link_list head, s, r;
	datatype x;
	head = r = NULL;
	printf("请输入若干整数序列");
	scanf_s("%d", &x);
	while (x != 0)/*以0结束输入*/
	{
		s = (link_list)malloc(sizeof(node));
		s->info = x;
		if (head == NULL) /*将新结点插入到链表最后面*/
			head = s;
		else
			r->next = s;
		r = s;
		scanf_s("%d", &x);
	}
	if (r)
		r->next = NULL;
	return head;

}
void print(link_list head)
{
	link_list p;
	int i = 0;
	p = head;
	printf("List is:\n");
	while (p)
	{
		printf("%5d", p->info);
		p = p->next;
		i++;
		if (i % 10 == 0)
			printf("\n");
	}
	printf("\n");
}
void delList(link_list head)/*释放不带头结点的单链表*/
{
	link_list p = head;
	while (p)
	{
		head = p->next;
		free(p);
		p = head;
	}
}

一,

void delList(link_list head)/*释放不带头结点的单链表*/
{
	link_list p = head;
	while (p)
	{
		head = p->next;
		free(p);
		p = head;
	}
}
link_list delx(link_list head, datatype x)/*删除不带头结点单链表head中的第一个值为x的值*/
{
	link_list p = head, q, pre = NULL;
	while (p&&p->info != x)
	{
		pre = p;
		p = p->next;
	}
	if (p)
	{
		if (!pre)
			head = head->next;
		else
			pre->next = p->next;
		free(p);
	}
	return head;
}
int main()

{
	link_list head;
	datatype x;
	head = creatbyqueue();
	print(head);
	printf("请输入你要删除的数:");
	scanf_s("%d", &x);
	head = delx(head, x);
	print(head);
	delList(head);
	system("pause");
	return 0;
}

二,

link_list reverse1(link_list head)
{
	link_list p = head, q, pre = NULL;
	while (p != NULL)
	{
		q = p;
		p = p->next;
		q->next = pre;
		pre = q;
	}
	return pre;
}
void reverse2(link_list *head)
{
	link_list p = *head, pre = NULL;
	while (p != NULL)
	{
		*head = p->next;
		p->next = pre;
		pre = p;
		p = *head;
	}
	*head = pre;
}
int main()
{
	link_list head;
	datatype x;
	head = creatbystack();/*头插法单链表*/
	print(head);/*输出原单链表*/
	head = reverse1(head);/*倒置单链表*/
	print(head);/*输出倒置后的单链表*/
	reverse2(&head);/*倒置单链表*/
	print(head);
	delList(head);
	system("pause");
	return 0;
}

 三,

link_list insert(link_list head, datatype x)
{
	link_list pre = NULL, p = head, h;
	h = (link_list)malloc(sizeof(node));
	h->info = x;
	while (p&&p->info < x)
	{
		pre = p;
		p = p->next;
	}
	if (pre == NULL)
	{
		h->next = head;
		head = h;
	}
	else if (pre != NULL)
	{
		h->next = p->next;
		p->next = h;
	}
	else
	{
		pre->next = h;
		h->next = NULL;
	}
	return head;
}

int main()
{
	datatype x;
	link_list head;
	printf("输入一组升序排列的整数:\n");
	head = creatbyqueue();				/*尾插入法建立单链表*/
	print(head);
	printf("请输入要插入的值:");
	scanf_s("%d", &x);
	head = insert(head, x);				/*将输入的值插入到单链表适当位置*/
	print(head);
	delList(head);
	system("pause");
	return 0;

 四,

link_list delallx(link_list head, datatype x)
{
	link_list p = head, pre = NULL;
	do
	{
		while (p&&p->info != x)
		{
			pre = p;
			p = p->next;
		}
		if (p)
		{
			if (!pre)
				head = head->next,pre = NULL;
			else
				pre->next = p->next;
		}
		p = p->next;
	} while (p);
	return head;
}
int main()
{
	datatype x;
	link_list head;
	head = creatbyqueue();				/*尾插入法建立单链表*/
	print(head);
	printf("请输入要删除的值:");
	scanf_s("%d", &x);
	head = delallx(head, x);
	print(head);
	delList(head);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/W1517055683/article/details/82960709