数据结构第三天

joseph问题
主函数部分
	#include "03_head.h"
     2	int main(int argc, const char *argv[])
     3	{
     4		int m=0;
     5		int n=0;
     6		int k=0;
     7		printf("请输入m::");
     8		scanf("%d",&m);
     9		printf("请输入n::");
    10		scanf("%d",&n);
    11		printf("请输入k::");
    12		scanf("%d",&k);
    13		Seq *list = creat_list();
    14		for(int i=1;i<=m;i++)
    15		{
    16			insert_head(list,i);
    17		}
    18		delect_list(list);
    19		pointto_list(list,m,n,k);
    20		return 0;
    21	}
函数部分
    22	#include "03_head.h"
    23	
    24	Seq* creat_list()
    25	{
    26		Seq *head = (Seq*)malloc(sizeof(Seq));
    27		if(NULL == head)
    28		{
    29			printf("创建链表失败\n");
    30			return NULL;
    31		}
    32		head->next = head;
    33		return head;
    34	}
    35	void insert_head(Seq* head,int i)
    36	{
    37		Seq *temp = (Seq*)malloc(sizeof(Seq));
    38		Seq *p = head;
    39		temp->data = i;
    40		temp->next = NULL;
    41		while(p->next != head)
    42		{
    43			p = p->next;
    44		}
    45		temp->next = p->next;
    46		p->next = temp;
    47	
    48		return;
    49	}
    50	void delect_list(Seq *head)
    51	{
    52		Seq *p = head;
    53		while(p->next != head)
    54		{
    55			p = p->next;
    56		}
    57		p->next = head->next;
    58		free(head);
    59		return;
    60	}
    61	void pointto_list(Seq *head,int n,int k,int m)
    62	{
    63		Seq* p = head;
    64		Seq *p2 = head;
    65		Seq *p1 = head;
    66		
    67			for(int i=0;i<k-1;i++)
    68			{
    69				p2 = p2->next;
    70			}
    71		for(int j=0;j<n;j++)
    72		{
    73			p = p2;
    74			for(int q=0;q<m-1;q++)
    75			{
    76				p2 = p2->next;
    77			}
    78			p1 = p2->next;
    79			p2->next = p1->next;
    80			printf("%d ",p1->data);
    81			free(p1);
    82			p = p2->next;
    83		}
    84		putchar(10);
    85		return;
    86	}
    87	
头文件部分
    88	#ifndef __HEAD_H__
    89	#define __HEAD_H__
    90	#include <stdio.h>
    91	#include <stdlib.h>
    92	#include <string.h>
    93	typedef int datalist;
    94	typedef struct node
    95	{
    96		  datalist data;
    97		  struct node* next;
    98	} Seq; 
    99	
   100	
   101	Seq* creat_list();
   102	void insert_head(Seq* head,int n);
   103	void delect_list(Seq *head);
   104	void pointto_list(Seq *head,int n,int k,int m);
   105	#endif
单向循环链表
主函数部分
     1  #include "03_head.h"
     2	int main(int argc, const char *argv[])
     3	{
     4		Seq *list = creat_list();
     5		int select = 0;
     6		int a = 0;
     7		while(1)
     8		{
     9			printf("插入____1\n");
    10			printf("查询____2\n");
    11			printf("删除____3\n");
    12			printf("遍历____4\n");
    13			printf("退出____5\n");
    14			printf("请选择:::");
    15			scanf("%d",&select);
    16			switch(select)
    17			{
    18			case 1:
    19				insert_tail(list);
    20				break;
    21			case 2:
    22				seek_list(list);
    23				break;
    24			case 3:
    25					printf("头删____1\n");
    26					printf("尾删____2\n");
    27					printf("请输入::::");
    28					scanf("%d",&a);
    29				switch(a)
    30				{
    31				case 1:
    32					delect_head(list);
    33					break;
    34				case 2:
    35					delect_tail(list);
    36					break;
    37				}
    38				break;
    39			case 4:
    40				lookup_list(list);
    41				break;
    42			case 5:
    43				goto Founce;
    44			default:
    45				printf("你有病啊!!!");
    46				break;
    47			}
    48		}
    49		
    50	Founce:
    51		return 0;
    52	}
函数部分
    53	#include "03_head.h"
    54	
    55	Seq* creat_list()
    56	{
    57		Seq *head = (Seq*)malloc(sizeof(Seq));
    58		if(NULL == head)
    59		{
    60			printf("创建头结点失败\n");
    61			return NULL;
    62		}
    63		head->txt.len = 0;
    64		head->next = head;
    65		return head;
    66	}
    67	
    68	void insert_head(Seq *head)
    69	{
    70		printf("请输入:::");
    71		int select;
    72		scanf("%d",&select);
    73		Seq *temp = (Seq*)malloc(sizeof(Seq));
    74		temp->txt.data = select;
    75		head->txt.len++;
    76		temp->next = head->next;
    77		head->next = temp;
    78		return;
    79	}
    80	void insert_tail(Seq *head)
    81	{
    82		printf("请输入:::");
    83		int select;
    84		scanf("%d",&select);
    85		Seq *temp = (Seq*)malloc(sizeof(Seq));
    86		temp->next = NULL;
    87		Seq *list = head;
    88		temp->txt.data = select;
    89		while(list->next != head)
    90		{
    91			list = list->next;	
    92		}
    93		temp->next = list->next;
    94		list->next = temp;
    95		head->txt.len++;
    96		return;
    97	}
    98	void seek_list(Seq *head)
    99	{
   100		Seq *p = head;
   101		printf("请输入要查找的位置");
   102		int select;
   103		scanf("%d",&select);
   104		if(head->txt.len < select || select < 0)
   105		{
   106			printf("输入的位置不合法\n");
   107			return;
   108		}
   109		for(int i=0;i<select;i++)
   110		{
   111			p = p->next;
   112		}
   113		printf("%d\n",p->txt.data);
   114	}
   115	void delect_head(Seq *head)
   116	{
   117		Seq *list = head;
   118		list = head->next;
   119		head->next = list->next;
   120		free(list);
   121		head->txt.len--;
   122		return;
   123	
   124	}
   125	void delect_tail(Seq *head)
   126	{
   127		Seq *p1 = head;
   128		Seq *p2 = head;
   129		while(p1->next->next != head)
   130		{
   131			p1 = p1->next;
   132		}
   133		p2 = p1->next;
   134		p1->next = head;
   135		free(p2);
   136		head->txt.len--;
   137		return;
   138	}
   139	void lookup_list(Seq *head)
   140	{
   141		Seq *p = head->next;
   142		while(p != head)
   143		{
   144			printf("%d ",p->txt.data);
   145			p = p->next;
   146			
   147		}
   148		putchar(10);
   149		return;
   150	}
   151	
头文件部分
   152	#ifndef __HEAD_H__
   153	#define __HEAD_H__
   154	#include <stdio.h>
   155	#include <stdlib.h>
   156	#include <string.h>
   157	typedef int ListType;
   158	typedef struct node
   159	{
   160		union{
   161			int len;
   162			ListType data;
   163		} txt;
   164		struct node *next;
   165	} Seq;
   166	
   167	Seq* creat_list();
   168	void insert_head(Seq *head);  	//头插
   169	void insert_tail(Seq *head);  	//尾插
   170	void seek_list(Seq *head);
   171	void delect_head(Seq *head);
   172	void delect_tail(Seq *head);
   173	void lookup_list(Seq *head);
   174	#endif
双向链表
主函数部分
#include "03_head.h"
int main(int argc, const char *argv[])
{
	Seq *list = creat_list();
	int select = 0;
	while(1)
	{
		printf("插入____1\n");
		printf("查询_____2\n");
		printf("删除______3\n");
		printf("遍历_______4\n");
		printf("按位置插入__5\n");
		printf("退出_________6\n");
		printf("请输入:::");
		scanf("%d",&select);
		switch(select)
		{
		case 1:
			insert_tail(list);
			break;
		case 2:
			break;
		case 3:
			delect_position(list);
			break;
		case 4:
			lookup_list_head(list);
			break;
		case 5:
			insert_position(list);
			break;
		case 6:
			goto Founce;
		}
	}
Founce:
	return 0;
}
函数部分
#include "03_head.h"

Seq* creat_list()
{
	Seq *head = (Seq*)malloc(sizeof(Seq));
	if(NULL == head)
	{
		printf("创建链表失败\n");
		return NULL;
	}
	head->txt.len = 0;
	head->next = head->prev = NULL;
	return head;
}

void insert_head(Seq *head)
{
	printf("请输入::::");
	int select;
	scanf("%d",&select);
	Seq *temp = (Seq*)malloc(sizeof(Seq));
	temp->txt.data = select;
	temp->next = NULL;
	temp->prev = NULL;
	if(NULL == head->next)
	{
		temp->next = head->next;
		head->next = temp;
		temp->prev = head;
	}
	else
	{
		head->next->prev = temp;
		temp->prev = head;
		temp->next = head->next;
		head->next = temp;
	}
	head->txt.len++;
	return;
}
void insert_tail(Seq* head)
{
	printf("请输入::::");
	int select;
	scanf("%d",&select);
	Seq *temp = (Seq*)malloc(sizeof(Seq));
	temp->txt.data = select;
	temp->prev = NULL;
	temp->next = NULL;
	Seq *p = head;
	while(p->next != NULL)
	{
		p = p->next;
	}
	temp->next = p->next;
	p->next = temp;
	temp->prev = p;
	head->txt.len++;

}
void insert_position(Seq *head)
{
	printf("请输入位置:::");	
	int select1;
	scanf("%d",&select1);
	if(0 > select1 || head->txt.len < select1)
	{
		printf("输入的位置不合法\n");
		return;
	}
	printf("请输入数据::::");
	int select;
	scanf("%d",&select);
	Seq *temp = (Seq*)malloc(sizeof(Seq));
	temp->txt.data = select;
	Seq *p = head;
	for(int i=1;i<select1;i++)
	{
		p = p->next;
	}
	if(NULL == p->next)
	{
		temp->next = p->next;
		p->next = temp;
		temp->prev = p;
	}
	else
	{
		p->next->prev = temp;
		temp->prev = p;
		temp->next = p->next;
		p->next = temp;
	}
	head->txt.len++;
	return;
	
}
void delect_head(Seq*head)
{
	Seq *p = head;
	p = head->next;
	head->next = p->next;
	if(p->next != NULL)
		p->next->prev = head;
	p->next=p->prev=NULL;
	free(p);
	head->txt.len--;
	return;
}
void delect_tail(Seq*head)
{
	Seq *p = head;
	Seq *p1 = head;
	while(p->next->next != NULL)
	{
		p = p->next;
	}
	p->next->prev = NULL;
	p1 = p->next;
	p->next = NULL;
	free(p1);
	head->txt.len--;
	return;
}
void delect_position(Seq *head)
{
	printf("请输入位置:::");
	int select;
	scanf("%d",&select);
	if(select < 0 || select > head->txt.len)
	{
		printf("输入的位置不合法\n");
		return;
	}
	Seq* p = head;
	for(int i=0;i<select;i++)
	{
		p = p->next;
	}
	if(p->next == NULL)
	{
		p->prev->next = NULL;
		p->prev = NULL;
	}
	else
	{
		p->next->prev = p->prev;
		p->prev->next = p->next;
	}
	return;

}
void lookup_list_head(Seq *head)
{
	Seq *p = head;
	while(p->next != NULL)
	{
		p = p->next;
		printf("%d ",p->txt.data);
	}
	putchar(10);
	return;
}
void lookup_list_tail(Seq *head)
{
	Seq *p = head;
	while(p->next != NULL)
	{
		p = p->next;

	}
	while(p->prev != NULL)
	{
		printf("%d ",p->txt.data);
		p = p->prev;
	}
	putchar(10);
	return;
}
头文件部分
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int datalist;
typedef struct node
{
	union{
		datalist data;
		int len;
	} txt;
	struct node *next;
	struct node *prev;
} Seq;
Seq* creat_list();
void insert_head(Seq *head);
void lookup_list_head(Seq *head);
void lookup_list_tail(Seq *head);
void insert_tail(Seq* head);
void insert_position(Seq *head);
void delect_head(Seq*head);
void delect_tail(Seq*head);
void delect_position(Seq *head);
#endif

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值