新手学习数据结构与算法---单链表的基本操作

来源:互联网 发布:初学英语单词软件 编辑:程序博客网 时间:2024/05/24 05:01

单链表操作。。。

大家指点一下。微笑

//单链表及其基本操作 //这里的链表都是带头结点的------------- #include <stdio.h>#include <malloc.h>         //用来进行动态内存分配#include <stdlib.h>typedef struct Node{char data;             //数据域 struct Node * next;     //指针域 }LinkList;                      //不要忘记这个;LinkList * SetNull(LinkList * L)         //置空表操作 {L->next = NULL;                 //只要将第一个节点的指针域设置为NULL即可 return L;                           }int Length(LinkList * L)          //求表长操作(带头结点),求的时候头结点不算 {LinkList * p;int n = 0;p = L->next;                 //从头结点后面的首元素节点开始计数 while(p != NULL)            //循环计数 { p = p->next;           n++;}return n;} LinkList * NumberGet(LinkList * L, int i)             //从带头结点的链表中找到第i个结点(头结点不算){int j = 1;LinkList * p;p = L->next;while(p != NULL && (j < i))                 //用j主要是防止i可能有:i<=0,i>n {p = p->next;j++;}if(i == j)return p;elsereturn NULL;                          //若未找到则返回NULL } LinkList * ValueGet(LinkList * L, char c)             //按值查找某个结点{LinkList * p;p = L->next;while(p != NULL){if(c == p->data)                   //把c写在前面是防止写成=,方便报错 break;                    //若找到则直接跳出 elsep = p->next;}return p; }void Insert(LinkList * L, int i, char c)       //链表的插入操作,在第i个位置插入值c(头结点不算){int j = 1;LinkList * p, * S;p = L;              //为什么这个不是p = L->next??? ,后面说明 while(p != NULL && (j < i))          //在j为i这个位置插入 {p = p->next;j++;}if(p == NULL)    //检测一下p是否为NULLprintf("序号超过范围\n");else{S = (LinkList *)malloc(sizeof(LinkList));S->data = c;S->next = p->next;              //就是这个原因,这时p正好是i前面的那个结点 } p->next = S; } void Delete(LinkList * L, int i){int j = 1;LinkList * p, *T;p = L;       //不用p = L->next 原因同上while(p != NULL && (j < i)){p = p->next;j++;}if(p != NULL && (p->next != NULL))   //确定第i个跟第i-1个都不是NULL {T = p->next;p->next = T->next;free(T);                 //释放这个结点 }}LinkList * CreatList()                  //建立单链表 {char c;LinkList * head, * L, * S;L = (LinkList *)malloc(sizeof(LinkList));head = L;L->next = NULL;            //先建一个空链表     while(c != '#')    {    S = (LinkList *)malloc(sizeof(LinkList));    S->data = c;    S->next = L->next;                  //让S->next变为NULL     L->next = S;    c = getchar();}return head;} void PrintList(LinkList * p){p = p->next;             //头结点不打印     while(p != NULL){printf("%4c", p->data);p = p->next;}}int main(){//自己定义测试 }


 

原创粉丝点击