LinkList的基本创建

您所在的位置:网站首页 createlist函数怎么写 LinkList的基本创建

LinkList的基本创建

2023-08-17 03:10| 来源: 网络整理| 查看: 265

#include using namespace std; #include #include #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IINFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 10 #define LISTINCREAMENT 2 typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList;

LNode和*LinkList;是与前面的typedef配合起来使用的,意思是给你声明的结构体起一个别名叫LNode,同时起一个指针别名叫LinkList,以后就可以用以下方式声明变量: LNode a;//声明了一个struct LNode型变量a,与写struct LNode a;等价,省心多了; LinkList p;//声明了一个struct LNode *型指针变量p,与写struct LNode *p等价,也省心多了。 如果没有前面的typedef,意思就不一样了:LNode就只是一个struct LNode型变量,LinkList也就只是个struct LNode *型指针。

//逆序建立单链表

void CreateList_L(LinkList &L,int n){ //逆位序输入n个元素的值,建立带头结点的单链表L int i; LinkList p; L=(LinkList)malloc(sizeof(LNode)); L->next = NULL;//先建立一个带头结点的单链表 for(i = n;i>0;--i){ p = (LinkList)malloc(sizeof(LNode)); //生成新结点 scanf("%d",&p->data); //插入元素值 p->next = L->next; L->next = p;//插入到表头 }//CreateList_L }

//打印单链表

void PrintList_L(LinkList L){ //打印输出链表元素的值 LinkList p=L->next; while(p) { printf("%d ",p->data); p = p->next; } printf("\n"); }//PrintList_L

//取第I个元素

Status GetElem_L(LinkList L,int i,ElemType &e){ //L为带头结点的单链表的头指针 //当第i个元素存在时,其赋值给e并返回OK,否则返回ERROR LinkList p; p=L->next; int j=1; //初始化,p指向第一个结点,j为计数器 while(p&&jnext; ++j; } if(!p||j>i) return ERROR; //第i个元素不存在 e=p->data; //取第i个元素 return OK; }//GetElem_L

//插入元素

Status LinkInsert_L(LinkList &L,int i,ElemType e){ //在带头结点的单链线性表L中第i个位置之前插入元素e LinkList p; LinkList s; p=L; int j=0; while(p&&jnext; ++j; } if(!p||j>i-1)//i小于1或者大于表长加1 return ERROR; s=(LinkList)malloc(sizeof(LNode)); //生成新结点 s->data=e; s->next=p->next; //插入L中 p->next=s; return OK; }//LinkInsert_L

//删除元素

Status LinkDelete_L(LinkList &L,int i,ElemType &e){ //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 LinkList p; LinkList q; p=L; int j=0; while(p->next&&jnext; ++j; } if(!(p->next)||j>i-1) return ERROR; //删除位置不合理 q=p->next; p->next=q->next; //删除并释放结点 e=q->data; free(q); }//LinkDelete_L

//主函数

int main() { struct LNode; ElemType e; LinkList L; int i,n,t,a,b; printf("请输入链表中最开始的数据个数\n"); scanf("%d",&n); printf("请输入链表中最开始的数据\n"); CreateList_L(L,n); PrintList_L(L); printf("请输入需要插入元素的位置:"); scanf("%d",&i); printf("请输入需要插入元素的的值:"); scanf("%d",&e); t=LinkInsert_L(L,i,e); if(t==OK) { printf("插入成功!"); printf("插入成功后的链表中元素为:\n"); PrintList_L(L); } else { printf("插入失败!"); } printf("请输入需要得到指定元素的位置:\n"); scanf("%d",&i); a=GetElem_L(L, i,e); if(a==OK) { printf("得到成功!"); printf("得到成功后的元素为%d\n",e); } else { printf("得到失败!"); } printf("请输入需要删除元素的位置:\n"); scanf("%d",&i); b=LinkDelete_L(L,i,e); if(b==OK) { printf("删除成功!"); printf("删除的元素为%d\n",e); printf("删除成功后的链表元素为:\n"); PrintList_L(L); } else { printf("删除失败!\n"); } return 0; }

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3