码迷,mamicode.com
首页 > 编程语言 > 详细

【数据结构】实现顺序表(c语言)

时间:2015-05-19 00:47:45      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:数据结构   顺序表   c语言   

头文件:


#ifndef _SEQLIST_H
#define _SEQLIST_H

#include <stdio.h>

#define INIT_SIZE 8

typedef struct SeqList
{
	int *base;
	size_t size;
	size_t capacity;
}SeqList;

// 要实现的函数
void InitList(SeqList *list);
int isfull(SeqList *list);
int isempty(SeqList *list);

void show_list(SeqList *list);
void tail_insert(SeqList *list,int x);
void head_insert(SeqList *list,int x);
void sort(SeqList *list);
void head_delete(SeqList *list);
void tail_delete(SeqList *list);
void pos_insert(SeqList *list,int x,int pos);
void val_insert(SeqList *list, int x);
void pos_delete(SeqList *list,int pos);
int find(SeqList *list,int x);
void val_delete(SeqList *list,int x);
int length(SeqList *list);
void reverse(SeqList *list);
void clear(SeqList *list);
void destroy(SeqList *list);
void quit_system(SeqList *list,int* x);

#endif



fun:



#include "SeqList.h"

// 定义两个返回值接收判断函数的结果
int fret = isfull;
int eret = isempty;

// 初始化顺序表
void InitList(SeqList *list)
{
	list->size = 0;
	list->capacity = INIT_SIZE;
	list->base = (int*)malloc(sizeof(int)*list->capacity);
}

// 判断顺序表是否满
int isfull(SeqList *list)
{
	if (list->size >= list->capacity)
	{
		return -1;
	}
	else
		return 0;
}

// 判断顺序表是否空
int isempty(SeqList *list)
{
	if (list->size == 0)
	{
		return -1;
	}
	else
		return 0;
}

// 显示
void show_list(SeqList *list)
{
	int i;
	if (list->size == 0)
	{
		printf("the table is empty!\n");
	}
	for (i = 0; i < list->size; ++i)
	{
		printf("%d  ", list->base[i]);
	}
	printf("\n");
}

// 尾插
void tail_insert(SeqList *list,int x)
{
	if (fret == -1)
	{
		printf("the table is full,can not insert!\n");
		return;
	}
	list->base[list->size] = x;
	list->size++;
}

// 头插
void head_insert(SeqList *list,int x)
{
	int i;
	if (fret == -1)
	{
		printf("the table is full,can not insert!\n");
		return;
	}
	for (i = list->size; i > 0; --i)
	{
		list->base[i] = list->base[i - 1];
	}
	list->base[0] = x;
	list->size++;
}

// 排序
void sort(SeqList *list)
{
	int i;
	int j;
	int temp;
	for (i = 1; i < list->size; ++i)
	{
		for (j = 0; j < list->size - i; ++j)
		{
			if (list->base[j]>list->base[j + 1])
			{
				temp = list->base[j];
				list->base[j] = list->base[j + 1];
				list->base[j + 1] = temp;
			}
		}
	}
}

// 头删
void head_delete(SeqList *list)
{
	int i;
	if (eret == -1)
	{
		printf("the table is empty,can not delete!\n");
		return;
	}
	for (i = 0; i < list->size; ++i)
	{
		list->base[i] = list->base[i + 1];
	}
	list->size--;
}

// 尾删
void tail_delete(SeqList *list)
{
	if (eret == -1)
	{
		printf("the table is empty,can not delete!\n");
		return;
	}
	list->size--;
}

// 按位插入
void pos_insert(SeqList *list,int x,int pos)
{
	int i;
	if (fret == -1)
	{
		printf("the table is full,can not insert!\n");
		return;
	}
	if (pos<0 || pos>list->size)
	{
		printf("the position is illegal!\n");
		return;
	}
	else
	{
		for (i = list->size; i > pos; --i)
		{
			list->base[i] = list->base[i - 1];
		}
		list->base[pos] = x;
		list->size++;
	}
}

// 按值插入
void val_insert(SeqList *list,int x)
{
	if (fret == -1)
	{
		printf("the table is full,can not insert!\n");
		return;
	}
	tail_insert(list,x);
	sort(list);
}

// 按位删除
void pos_delete(SeqList *list,int pos)
{
	int i;
	if (eret == -1)
	{
		printf("the table is empty,can not delete!\n");
		return;
	}
	if (pos<0 || pos>list->size)
	{
		printf("the position is illegal!\n");
		return;
	}
	else
	{
		for (i = pos; i < list->size; ++i)
		{
			list->base[i] = list->base[i + 1];
		}
		list->size--;
	}
}

// 查找
int find(SeqList *list,int x)
{
	int i;
	for (i = 0; i < list->size; ++i)
	{
		if (list->base[i] == x)
		{
			return i;
		}
	}
	printf("the number is not exit!\n");
	return 0;
}

// 按值删除
void val_delete(SeqList *list,int x)
{
	int ret = find(list, x);
	int i;
	if (eret == -1)
	{
		printf("the table is empty,can not delete!\n");
		return;
	}
	if (ret == -1)
	{
		printf("the number is not exist!\n");
		return;
	}
	else
	{
		for (i = ret; i <list->size; ++i)
		{
			list->base[i] = list->base[i + 1];
		}
		list->size--;
	}
}

// 求长度
int length(SeqList *list)
{
	return list->size;
}

// 反转
void reverse(SeqList *list)
{
	int temp;
	int i = 0;
	int j = list->size - 1;
	if (eret == -1)
	{
		printf("the table is empty,can not operate!\n");
		return;
	}
	while (i < j)
	{
		temp = list->base[i];
		list->base[i] = list->base[j];
		list->base[j] = temp;
		++i;
		--j;
	}
}

// 清空
void clear(SeqList *list)
{
	list->size = 0;
}

// 摧毁
void destroy(SeqList *list)
{
	list->base = NULL;
}

// 退出系统
void quit_system(SeqList *list,int *x)
{
	*x = 0;
}


主函数:



// c实现顺序表

#include "SeqList.h"

int main()
{
	SeqList mylist;
	InitList(&mylist);
	int input = 1;
	int insert = 0;
	int pos = 0;
	while (input)
	{
		printf("*********************************************************************\n");
		printf("*     [1] show_list                       [2] tail_insert           *\n"); 
		printf("*     [3] head_insert                     [4] sort                  *\n"); 
		printf("*     [5] head_delete                     [6] tail_delete           *\n"); 
		printf("*     [7] pos_insert                      [8] val_insert            *\n"); 
		printf("*     [9] pos_delete                      [10] find                 *\n"); 
		printf("*     [11] val_delete                     [12] length               *\n"); 
		printf("*     [13] reverse                        [14] clear                *\n"); 
		printf("*     [15] destroy                        [16] quit_system          *\n"); 
		printf("*********************************************************************\n"); 
		printf("please enter your choose:");
		scanf_s("%d", &input);
		switch (input)
		{
			case 1:
				show_list(&mylist);
				break;
			case 2:
				printf("please enter the number want to insert:\n");
				while (scanf_s("%d", &insert),insert != -1)
				{
					tail_insert(&mylist, insert);
				}
				break;
			case 3:
				printf("please enter the number want to insert:\n");
				while (scanf_s("%d", &insert), insert != -1)
				{
					head_insert(&mylist, insert);
				}
				break;
			case 4:
				sort(&mylist);
				break;
			case 5:
				head_delete(&mylist);
				break;
			case 6:
				tail_delete(&mylist);
				break;
			case 7:
				printf("please enter the number want to insert:\n");
				scanf_s("%d", &insert);
				printf("please enter the position :\n");
				scanf_s("%d", &pos);
				pos_insert(&mylist, insert, pos);
				break;
			case 8:
				printf("please enter the number want to insert:\n");
				scanf_s("%d", &insert);
				val_insert(&mylist, insert);
				break;
			case 9:
				printf("please enter the position :\n");
				scanf_s("%d", &pos);
				pos_delete(&mylist, pos);
				break;
			case 10:
				printf("please enter the number want to find:\n");
				scanf_s("%d", &insert);
				printf("at the %d\n", find(&mylist, insert));
				break;
			case 11:
				printf("please enter the number want to delete:\n");
				scanf_s("%d", &insert);
				val_delete(&mylist, insert);
				break;
			case 12:
				printf("the table's length is %d\n", length(&mylist));
				break;
			case 13:
				reverse(&mylist);
				break;
			case 14:
				clear(&mylist);
				break;
			case 15:
				destroy(&mylist);
				break;
			case 16:
				quit_system(&mylist, &input);
				break;
			default:
				break;
		}
	}
	return 0;
}

显示:


技术分享


尾插:


技术分享


头插:


技术分享


排序:


技术分享


头删:


技术分享


尾删:


技术分享


定位插入:


技术分享


按值插入:


技术分享


按位删除:


技术分享


查找:


技术分享


按值删除:


技术分享


求长度:


技术分享


反转:


技术分享


清除:


技术分享


退出系统:


技术分享



【数据结构】实现顺序表(c语言)

标签:数据结构   顺序表   c语言   

原文地址:http://blog.csdn.net/zhaoyaqian552/article/details/45832949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!