表之顺序结构和链式结构

来源:互联网 发布:python win32自动化 编辑:程序博客网 时间:2024/05/21 10:36
#include "stdafx.h"#include<stdlib.h>#define ElementType int#define MAXSIZE 10typedef struct LNode *List;struct LNode{ElementType Data[MAXSIZE];int Last;};//初始化List MakeEmpty(){List PtrL;PtrL = (List)malloc(sizeof(struct LNode));PtrL->Last = -1;return PtrL;}//查找int Find(ElementType X, List PtrL){int i = 0;while (i <= PtrL->Last && PtrL->Data[i] != X)i++;if (i > PtrL->Last)return -1;//如果没有找到,返回-1else return i;//找到存储位置}//插入(第i个1<i<n+1)位置插入一个值为x的新元素void Insert(ElementType X, int i, List PtrL){int j;if (PtrL->Last == MAXSIZE - 1) {printf("表满\n");    return;}//检查插入位置的合法性if (i <1 || i> PtrL->Last + 2){printf("位置不合法");return;}for (j = PtrL->Last; j >= i - 1; j--)PtrL->Data[j + 1] = PtrL->Data[j];PtrL->Data[i - 1] = X;PtrL->Last++;//Last仍是指向最后的元素return;}//删除第i个位置上的数据void Delete(int i, List PtrL){int j;if (i < 1 || i >PtrL->Last + 1){printf("不存在第%d个元素");return;}for (j = i; j <= PtrL->Last; j++)PtrL->Data[j - 1] = PtrL->Data[j];PtrL->Last--;return;}///************************************************************************//线性表的链式存储结构typedef struct LNode *List;struct LNode{ElementType Data;List Next;};struct LNode L;List PtrL;//求表长int Length(List PtrL){List p = PtrL;int j = 0;while (p) {p = p->Next;j++;}return j;}//按序号查找List FindKth(int k, List PtrL){List p = PtrL;int i = 1;while (p != NULL && i < k){p = P->Next;i++;}if (i == k)return p;elsereturn NULL;}//按值查找List Find(ElementType X, List PtrL){List p = PtrL;while (p != NULL && p->Data != X)p = p->Next;rerturn p;}//插入,插入在第i-1个节点的后面void Insert(ElementType X, int i, List PtrL){List p, s;if (i == 1){s = (List)malloc(sizeof(struct LNode));//申请装填节点s->Data = X;s->Next = PtrL;return s;              //返回表头指针}p = FindKth(i - 1, PtrL);//查找第i-1个节点if (p == NULL){printf("参数i出错");return NULL;}else{s = (List)malloc(sizeof(struct LNode));s->Data = X;s->Next = p->Next;p->Next = s;return PtrL;}}//删除链表的第i个位置上的节点//先找到链表的第i-1个结点//再用指针s指向要被删除的节点(p的下一个节点)//然后修改指针,删除s所指向的结点//最后释放s所指向的空间List Delete(int i, List PtrL){List p, s;if (i == 1)//要删除的是表的第一个结点{s = PtrL; //s指向第1个结点if (PtrL != NULL)PtrL = PtrL->Next;//从表中删除else  return NULL;free(s);                     //释放空间return PtrL;}p = FindKth(i - 1, PtrL);//查找第i-1个结点if (p == = NULL){           printf("第%d个结点不存在",i - 1);    return NULL;}else if (p->Next == NULL){printf("第%d个结点不存在", i);return NULL;}else{s = p->Next;//s指向第i个结点p->Next = s->Next;//从链表中删除free(s);retur PtrL;}}

0 0
原创粉丝点击