数据结构单项链表复习"/>
数据结构单项链表复习
#include<stdio.h>
#include<stdlib.h>
//函数执行后返回的状态值
#define OK 1
#define ERROR 0//函数执行后返回的状态值
typedef int Status;
//元素的数据类型,这里假设为int
typedef int ElemType;//组成链表的单个结点的结构体
typedef struct node
{//存放数据ElemType data;//指向下一个结点struct node *next;
}Node;//函数声明
Node * findNodeAtX(Node *head,int x);
void loopLinkList(Node *head);/*** 在链表第x个位置上插入元素e* */
Status LiskInsert(Node **Phead, int x, ElemType e)
{if(x == 1){Node *p = (Node *)malloc(sizeof(Node));p->data = e;p->next = *Phead;*Phead = p;return OK;}Node *s = findNodeAtX(*Phead,x-1);if(s == NULL){printf("参数i错误");return ERROR;}else{Node *p = (Node*)malloc(sizeof(Node));p->data = e;//A->B->Cp->next = s->next;s->next = p;return OK;}
}
/*** 删除链表第x个元素,有错误* */
Status removeAtX(Node **Phead, int x, ElemType *e)
{Node *p,*s;//如果删除的是第一个结点if(x == 1){s = *Phead;if(*Phead == NULL)return ERROR;else{*Phead = (*Phead)->next;free(s);//loopLinkList(*Phead);return OK;}}p = findNodeAtX(*Phead,x-1);if(p==NULL){printf("第%d个结点不存在\n",x-1);return ERROR;}else if(p->next == NULL){printf("第%d个结点不存在\n",x);return ERROR;}else{//A->B->Cs = p->next;*e = s->data;p->next = s->next;free(s);return OK;}
}
/*** 创建链表* */
Node * CreateList()
{Node *head=NULL, *p,*q;int length;printf("输入结点个数");scanf("%d",&length);for(int i = 0; i < length; i++){q = (Node *)malloc(sizeof(Node));q->next = NULL;if(head == NULL)head = q;elsep->next = q;printf("输入该结点存放的数据");scanf("%d",&q->data);p = q;}return head;
}
/*** 遍历链表* */
void loopLinkList(Node *head)
{Node *p = head;printf("链表中的数据\n");while(p!=NULL){printf("%d\n",p->data);p = p->next;}
}
/*** 找到链表第X个节点* */
Node * findNodeAtX(Node *head,int x)
{int j = 1;Node *findNode = head;while(findNode!=NULL && j<x){findNode = findNode->next;j++;}//如果改成if(p==NULL)return NULL;esle return p;//不可以如果x为负数则返回的是headif(j == x)return findNode;elsereturn NULL;
}
/*** 按值查找* */
Node * findElem(Node *head,ElemType find)
{//空指针的意思就是什么也不指,而指向空的指针不是空指针Node *p = head;while(p!=NULL && p->data!=find){p = p->next;}return p;
}int main(int argc, char const *argv[])
{Node *myList;ElemType *e;myList = CreateList();LiskInsert(&myList,1,9);loopLinkList(myList);removeAtX(&myList,1,e); loopLinkList(myList);return 0;
}
运行结果
更多推荐
数据结构单项链表复习
发布评论