顺序线性表的实现及操作(C语言实现)

来源:互联网 发布:焊接仿真软件 编辑:程序博客网 时间:2024/06/05 09:06

什么是顺序线性表.....自己百度。

头文件

2_1.h#ifndef  _2_1_H#define  _2_1_H typedef void SeqList;typedef void SeqListNode;//创建线性表SeqList * SeqList_Create(int capacity);//销毁线性表void SeqList_DesTroy(SeqList * list);void SeqList_Clear(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_Capacity(SeqList* list);int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);SeqListNode* SeqList_Get(SeqList* list, int pos);SeqListNode* SeqList_Delete(SeqList* list, int pos);#endif

源文件:

// 顺序线性表.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <malloc.h>#include <stdlib.h>#include "2_1.h"typedef unsigned int TSeqListNode;typedef struct {int len;     //长度int capacity;//总长度TSeqListNode * node;//每个节点的指针} TSeqList;int main(){   SeqList* list = SeqList_Create(5);//创建线性表        int i = 6;//赋值6个变量,已超过线性表最大值 5    int j = 1;    int k = 2;    int x = 3;    int y = 4;    int z = 5;    int index = 0;        SeqList_Insert(list, &i, 7);//将这6个变量插入线性表中    SeqList_Insert(list, &j, 0);    SeqList_Insert(list, &k, 0);    SeqList_Insert(list, &x, 0);    SeqList_Insert(list, &y, 0);    SeqList_Insert(list, &z, 0);    //遍历    for(index=0; index<SeqList_Length(list); index++)    {        int* p = (int*)SeqList_Get(list, index);                printf("%d  ", *p);    }        printf("\n");    //删除操作    while( SeqList_Length(list) > 0 )    {        int* p = (int*)SeqList_Delete(list, 0);                printf("删除了: %d\n", *p);    }SeqList_Clear(list);    SeqList_DesTroy(list);        system("pause");return 0;}//创建线性表SeqList * SeqList_Create(int capacity){TSeqList* ret = NULL ;if(capacity >= 0){ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*capacity);  //为线性表分配空间,包含结//构体和节点的总大小}if(NULL != ret){ret->len = 0;ret->capacity = capacity;ret->node = (TSeqListNode*)(ret + 1);//将节点指向上述分配到的空间的后部分}return ret;}//销毁void SeqList_DesTroy(SeqList * list){free(list);}//清空void SeqList_Clear(SeqList* list){TSeqList * ret = (TSeqList*)list;if(NULL != ret){ret->len = 0;}}//获得线性表的长度int SeqList_Length(SeqList* list){TSeqList * ret = (TSeqList*)list;int len = -1;if(NULL != ret){len = ret->len;}return len;}//线性表的总长度int SeqList_Capacity(SeqList* list){TSeqList * ret = (TSeqList*)list;int capacity = -1;if(NULL != ret){ret->capacity = capacity;}return capacity;}//插入int SeqList_Insert(SeqList* list, SeqListNode* node, int pos){TSeqList * sList = (TSeqList*)list;int i,ret = -1;if((sList != NULL) &&(pos >= 0) && sList->capacity >= sList->len+1){if(pos >= sList->len){pos = sList->len;}for(i = sList->len; i > pos; i--){sList->node[i] = sList->node[i-1];}sList->node[i] = (TSeqListNode)node;++sList->len;ret = 1;}return ret;}//获得指定位置的节点SeqListNode* SeqList_Get(SeqList* list, int pos){TSeqList * sList = (TSeqList*)list;TSeqListNode* node = NULL;if(NULL != sList && pos>=0 && pos < sList->len){node = (TSeqListNode*)sList->node[pos];}return node;}//删除SeqListNode* SeqList_Delete(SeqList* list, int pos){TSeqList * sList = (TSeqList*)list;SeqListNode * node = SeqList_Get( list, pos);int i;if(sList != NULL && pos >= 0 && pos< sList->len){ for( i=pos+1; i<sList->len; i++) {sList->node[i-1] = sList->node[i]; }  sList->len--;}return node;}

运行结果:

4  3  2  1  6删除了: 4删除了: 3删除了: 2删除了: 1删除了: 6请按任意键继续. . .

如有什么错误,望不吝告知。

0 0
原创粉丝点击