单链表操作系列

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

typedef int ElemType;
//定义结点类型
typedef struct Node
{
	ElemType data;
	struct Node *next;
}LNode,*LinkList;

//单链表的建立1,头插法建立单链表,逆序生成
LinkList LinkListCreateH()
{
	LinkList L,p;
	L = (LinkList)malloc(sizeof(LNode));
	L->data = -1;
	L->next = NULL;
	ElemType x;
	while(scanf("%d",&x)!=EOF)
	{
		p = (LinkList)malloc(sizeof(LNode));
		p->data = x;
		p->next = L->next;
		L->next = p;
	}
	return L;
}

//单链表的建立2,尾插法建立单链表
LinkList LinkListCreateT()
{
	LinkList L,p,q;
	L = (LinkList)malloc(sizeof(LNode));
	L->data = -1;
	L->next = NULL;
	q=L;
	ElemType x;
	while(scanf("%d",&x)!=EOF)
	{
		p = (LinkList)malloc(sizeof(LNode));
		p->data = x;
		q->next = p;
		q=p;

	}
	q->next = NULL;
	return L;
}

//单链表的插入,在链表的第i个位置插入x的元素
LinkList LinkListInsert(LinkList L,int i,ElemType x)
{
	LinkList p,q;
	p = L;
	for(int temp=0;temp<i;++temp)
		p = p->next;
	q = (LinkList)malloc(sizeof(LNode));
	q->data = x;
	q->next = p->next;
	p->next = q;

	return L;
}

//单链表的删除,在链表中删除值为x的元素
LinkList LinkListDelete(LinkList L,ElemType x)
{
	LinkList p,q;
	p=q = L;//不能为L->next,不然当删除第一个元素时会出错
	while(p->next->data!=x)
		p = p->next;
	if(p->next)
	{
		q=p->next;
		p->next=q->next;
		free(q);
	}

	return L;
}

//单链表逆置
LinkList LinkListReverse(LinkList L)
{
	printf("逆置开始");
	LinkList p,q;
	p=q=L->next;
	L->next = NULL;
	while(p)
	{
		q=p->next;
		p->next = L->next;
		L->next = p;
		p=q;

	}
	return L;

}

//单链表排序
LinkList LinkListSort(LinkList L)
{
		printf("排序开始!");

	LinkList p,q;
	int temp;
	for (p=L->next;p!=NULL;p=p->next)
	{
		for (q=p->next;q!=NULL;q=q->next)
		{

			if(q->data<p->data)
			{
				temp=q->data;
				q->data = p->data;
				p->data = temp;
			}

		}
	}
	return L;

}

//主函数
int main()
{
	LinkList list,start;
	printf("输入单链表的数据:\n");
	list = LinkListCreateT();
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);

	printf("创建成功,请输入插入的元素位置及数据:\n");
	int x,y;
	scanf("%d,%d",&x,&y);
	LinkListInsert(list,x,y);
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
	printf("插入成功,请输入删除的元素:\n");
	int z;
	scanf("%d",&z);
	LinkListDelete(list,z);
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);

	printf("将单链表进行逆置吗?");
	int flag;
	scanf("%d",&flag);
	if(flag==1)
		LinkListReverse(list);
	else
		printf("不逆置!");
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);

	printf("将单链表进行排序吗?");
	int flag1;
	scanf("%d",&flag1);
	if(flag1==1)
		LinkListSort(list);
	else
		printf("不排序!");
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);

	return 0;
}

单链表操作系列,布布扣,bubuko.com

时间: 2024-10-13 10:23:18

单链表操作系列的相关文章

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

单链表操作

#include<stdio.h>#include<malloc.h> typedef struct Node{ int data; struct Node *next;}LinkList; //就地反转int LinkListRerverse(LinkList *head){ LinkList *q,*p; p = head->next; head->next = NULL; while(p != NULL){ q = p->next; p->next =

数据结构之 线性表---单链表操作A (删除链表中的指定元素)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

10、单链表操作

单链表操作 单链表操作1 /*单链表的类型定义*/ typedef int DataType; typedef struct node { DataType data; struct node * next; }LinkNode, *LinkList; /*单链表的定位运算*/ LinkNode *Locate(LinkNode *L, int k)//????为什么此处是LinkNode *Locate()类型,表示什么意思 { LinkNode *p; int i; i= 1; p = L-

循环单链表操作(转)

循环单链表的初始化,建立,插入,查找,删除. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 //////////////////////////////////////////////// //循环单链表的初始化,建立,插入,查找,删除.// //Autho

单链表操作实例程序

#include <iostream> #include <iomanip> using namespace std; typedef struct node { int val; node *next; }node; node * create_list(); void traverse_list(node *pHead); int get_len_list(node *pHead); bool delete_list(node *pHead,int pos,int &v

单链表操作问题,主要是逆操作

工作无事,搞其它事也不太方便,写点简单代码.本来想写的高大上一些,发现用范型不是一点代码的事,还是算了. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct list { int val; struct list *next; }Node_def; #define NODE_SIZE (sizeof(Node_def)) #undef T #define T Node_def

数据结构之---c语言实现循环单链表操作

//=========杨鑫========================// //循环单链表的实现 #include <stdio.h> #include <stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }Node,*LinkedList; int count = 0; //1.单循环链表的初始化 LinkedList init_ci

单链表操作(数据结构实验一)

 实验内容 1 初始化一个带表头结点的单链表. 2 从表头不断插入结点建立一个带表头结点的单链表.设表中元素的类型为整型,元素值从键盘输入. 3 从表尾不断插入结点建立一个带表头结点的单链表.设表中元素的类型为整型,元素值从键盘输入. 4 打印一个带表头结点的单链表. 5 清空一个带表头结点的单链表. 代码:(只是把各个函数写好,并给出了调用数据,其他根据实验要求改就行了) #include<stdio.h> #include<stdlib.h> #include<mallo