表之顺序结构和链式结构
生活随笔
收集整理的這篇文章主要介紹了
表之顺序结构和链式结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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;}}
總結
以上是生活随笔為你收集整理的表之顺序结构和链式结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言学习之时钟函数clock()函数
- 下一篇: 栈之顺序结构和链式结构