C语言顺序表、单链表基本操作(Clean)

单链表基本操作目录:
1.创建头结点
2.链表元素查找
3.插入节点
4.删除节点
5.头插法
6.尾插法
7.排序(起泡法排序)
8.打印链表

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

typedef struct node
{
	int data;
	int Node;
	struct node *next;
}Linklist;


Linklist *create() // 1,Creat Head node:No data,No serial number.
{
	Linklist *head;
	head=(Linklist *)malloc(sizeof(Linklist));
	head->Node=0;
	head->next=NULL;
	return head;	
}


Linklist *seek(Linklist *head,int value) // 2.Seek:seek for the "value".
{
	Linklist *p;
	p=head->next;
	while((p->data!=value)&&(p->next!=NULL))
	{
	  p=p->next;
	}
	if(p->next==NULL)
	{
		printf("Not found!");
		return;
	}
	 return p;
}


Linklist *insert_node(Linklist *head,int insertElem,int elem) // 3.Insert:insert the "insertElem" after the "elem".
{
	Linklist *p,*t;
	p=head->next;
	while((p->data!=elem)&&(p->next!=NULL))
	{
        p=p->next;
	}
	if(p->next==NULL)
	{
		printf("Data error!");
		return;  
	}
	
	t=(Linklist *)malloc(sizeof(Linklist));
	t->data=insertElem;
	t->next=p->next;
	p->next=t;
	
	return head;
}


Linklist *del_node(Linklist *head,int value) // 4.Delete:delete "value".
{
	Linklist *p,*t;
	p=head;           //Warming: "p=head->next" in here is wrong!
	while(p->next!=NULL)
	{
		if(p->next->data==value)
		{
			t=p->next;
			p->next=p->next->next; // "p->next=t->next" in here is also correct.
			free(t);
		}
		else p=p->next;
	}

	return head;
}


Linklist *head_insert(Linklist *head,int value) // 5.Head Insert.
{
	Linklist *p,*t;
	t=head;
	p=(Linklist *)malloc(sizeof(Linklist));
	p->data=value;
	p->next=t->next;
	t->next=p;
	return head;
}


Linklist *tail_insert(Linklist *head,int value) // 6.Tail Insert.
{
	Linklist *p,*t;
	t=head;
	p=(Linklist *)malloc(sizeof(Linklist));
	p->data=value;
	
	while(t->next!=NULL) //Move the Pointer "t" to the end of the list.
	{
		t=t->next;
	}
	t->next=p;
	p->next=NULL;
	
	return head;
}


Linklist *sort(Linklist *head) // 7.Sort:Bubble sorting.
{
	Linklist *p,*t;
	int i,j,temp;
	int n=0;
	
	p=head->next;	
	while(p!=NULL) //Calculating the number of nodes in Linklist.
	{
		n++;
		p=p->next;
	}
	
	for(i=1;i<n;i++) //Bubble sorting
	{
		p=head->next;
		t=p->next;
		
		for(j=0;j<n-i;j++)
		{
			if(p->data>t->data)
			{
				temp=p->data;
				p->data=t->data;
				t->data=temp;
			}
			
			p=p->next; 
			t=t->next;
			
		}
		
	}
	
	return head;
}

Linklist *print(Linklist *head) // 8.Print Linklist.
{
	Linklist *p;
	p=head->next;
	if(p==NULL)
	{
		printf("Linklist is empty.\n");
		
	}
	while(p!=NULL)
	{
	  printf(" %d",p->data);
	  p=p->next;	
	}
	printf("\n");	
	return head;
}

int main()
{
	
	return 0; 
}	

顺序表:

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

#define Maxsize 100

typedef int dataType;

typedef struct list
{
	dataType *elem;
	int length;
}sqList;

int create(sqList *L)
{
	L->elem=(dataType *)malloc(Maxsize*sizeof(dataType));
	if(!L->elem)
	{
		printf("Space allocation failed!\n");
		return;
	}
	L->length=0;
	return;
}

int Get(sqList *L,int i,dataType *value)
{
	if(i<0||i>=L->length)
	{
		printf("Number is out of range!\n");
		return;
	}
	*value=L->elem[i];
	return;
}

int seek(sqList *L,dataType value)
{
	int i;
	for(i=0;i<L->length;i++)
	{
		if(L->elem[i]==value)
		return i;	
	 } 
	 printf("Not found!\n");
	return;
}

int insert(sqList *L,int i,dataType value) //"i" is the location ,a[i]
{
	int j;
	if(i<0||i>Maxsize-1)
	{
		printf("Inserted location does not exist!\n");
		return;
	}
	
	if(L->length==Maxsize)
	{
		printf("Sequential List is Full!\n");
		return;
	}
	
	if(i<L->length) //"i" belongs to location length.
	{
		   for(j=L->length;j>i-1;j--)
	   {
		 L->elem[j+1]=L->elem[j];
		 L->elem[i]=value;
		 L->length++;
		 
       }
	
	}
	else if(i==L->length)
	{
		L->elem[i]=value;
		L->length++;
	}
	else if(i>L->length)
	{
		printf("Inserted location does not exist!\n");
		return;
	}
	return;
}

int Delete(sqList *L,int i)
{
	int j;
	
	if(i<0||i>=L->length)
	{
		printf("Delete location does not exist!\n");
		return;
	}
	
	for(j=i+1;j<L->length;j++)
	{
		L->elem[j-1]=L->elem[j];
		
	}
	L->length--;
	return;
 } 
 
int traverse(sqList *L)
{
	int i;
	for(i=0;i<L->length;i++)
	{
		printf("%d ",L->elem[i]);
	}
	return;
}

int main()
 {
 	sqList L;
 	dataType x;
 	int i,n;
 	create(&L);
 	for(i=0;i<10;i++)
 	insert(&L,i,i*10);
 	
 	printf("Traverse:");
 	traverse(&L);
 	printf("\n");
 	printf("\n");
 	
 	Get(&L,2,&x);
 	printf("Get Location [%d] is %d.\n",2,x);
 	printf("\n");
 	
 	printf("Seek:");
	 printf("Element %d location is [%d].\n",30,seek(&L,30));
	 printf("\n");
	 
	 Delete(&L,4);
	 printf("Delete Location [%d] Element.\n",4);
	 printf("\n");
	 printf("Traverse:");
	 traverse(&L);
	 printf("\n");
	 
	return 0;
}
发布了7 篇原创文章 · 获赞 7 · 访问量 248

猜你喜欢

转载自blog.csdn.net/Attract1206/article/details/105053432