数据结构基础-单链表的实现

代码:

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#pragma once
using namespace std;
typedef int datatype;
int pos = 1;
typedef struct node
{
	/* data */
	datatype data;
	struct node* next;
} linklist;
linklist* createlist()
{
	linklist* head;
	head = (linklist*)malloc(sizeof(linklist));
	head->next = NULL;
	return head;
}
int posi[105] = { 0 };
/*int Size(linklist *l)
{
	node *p = l->next;
	int k= 0;
	while(p)
	{
		k++;
		p=p->next
	}
	return k;
}*/
void insert(linklist* l, int k, datatype x)
{
	if (k < 1)
		exit(1);
	node* p = l;
	int i = 0;
	while (p && i < k - 1)
	{
		p = p->next;
		i++;
	}
	if (!p)
		exit(1);
	node* s = (node*)malloc(sizeof(node));
	s->data = x;
	s->next = p->next;
	p->next = s;
}
int size(linklist* l)
{
	node* p = l->next;
	int k = 0;
	while (p)
	{
		k++;
		p = p->next;
	}
	return k;
}
void Delete(linklist* l, int k)
{
	if (k < 1)
		exit(1);
	node* p = l;
	int i = 0;
	while (p->next && i < k - 1)
	{
		p = p->next;
		i++;
	}
	if (p->next == NULL)
		exit(1);
	node* q = p->next;
	p->next = q->next;
	free(q);
}
int empty(linklist* l)
{
	return l->next == NULL;
}
datatype getdata(linklist* l, int k)
{
	if (k < 1)
		exit(1);
	node* p = l;
	int i = 0;
	while (p && i < k)
	{
		p = p->next;
		i++;
	}
	if (!p)
		exit(1);
	return p->data;
}
int find(linklist* l, datatype x)
{
	pos = 0;
	node* p = l->next;
	while (p && p->data != x)
	{
		p = p->next;
		pos++;
	}
	if (pos == 0)
		return -10;
	return pos;
	//return p;
	//pos = 0;
}
void printl(linklist* l)
{
	node* p = l->next;
	while (p)
	{
		printf("%d", p->data);
		p = p->next;
		if (p)
			printf(" ");
	}
}
void clearlist(linklist* l)
{
	node* p, * q;
	p = p->next;
	while (p)
	{
		q = p;
		p = p->next;
		free(q);
	}
	l->next = NULL;
}
int main()
{
	linklist* list = createlist();
	/*insert(list, 1, 10);
	insert(list, 2, 10);
	insert(list, 3, 30);*/
	int tim;
	int ans;
	int _;
	cin >> tim;
	for (int ios = 1; ios <= tim; ios++)
	{
		cin >> ans;
		insert(list, ios, ans);
	}
	int anss;
	//cin >> anss;
	cin >> _;
	for (int ios = 1; ios <= tim; ios++)
	{
		find(list, _);
		if (find(list, _) != -10)
			Delete(list, find(list, _));
		//pos = 0;
	}
	/*for (int ios = 1; ios <= tim; ios++)
	{
		find(list, _);
		posi[ios] = pos;
		if(posi[ios]!=0)
		Delete(list, posi[ios]);
	}*/
	//printf("%d",pos);
	//nsert(list, anss, _);
	//printl(list);
	//printf(" ");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值