C语言单向链表的创建,输入,插入和删除的实现
/ 线性表-链表的操作: 只提供核心语句 /
#include "stdioh"
#include "stdlibh"
#define N 100
typedef int ElemType;/ 链表的存储结构 /
typedef struct LNode{
ElemType data;
struct LNode next; } LNode,LinkList;/ 链表的基本操作 // 1初始化链表 /
void InitList(LinkList L)
{ L=(LinkList)malloc(sizeof(LNode));
(L)->next=NULL; }/ 2销毁链表 /
void DestroyList(LinkList L)
{ LinkList p;
while(L!=NULL)
{ p=L;
L=(L)->next;
free(p); }
}
/ 10在顺序表第n个位置插入元素e /
void ListInsert(LinkList L, int n, ElemType e)
{ LinkList p,q,new; int i;
q=L; p=(L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
new=(LinkList)malloc(sizeof(LNode));
new->data=e;
q->next=new; new->next=p; }/ 11删除链表中第n个位置的元素 /
void ListDelete(LinkList L, int n, ElemType e)
{ LinkList p,q; int i;
q=L; p=(L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
e=p->data;
q->next=p->next; free(p); }/ 12遍历链表并输出 /
void ListTraverse(LinkList L)
{ LinkList p;
printf("\nList:\t");
p=L->next;
while (p!=NULL)
{ printf("%d\t",p->data);
p=p->next; }
}/ A(2)后接法建立顺序链表 /
void CreateList2(LinkList L, ElemType a[], int n)
{ LinkList p,new; int i;
p=L;
for(i=0; i<n; i++)
{ new=(LinkList)malloc(sizeof(LNode));
new->data=a[i];
p->next=new; p=p->next; }
p->next=NULL;
}
/ 主函数 /
main()
{ LinkList La; ElemType a[]={1,3,5,7,9},x;
InitList(&La);//初始化链表
CreateList2(&La,a,5);//建立链表并用数组赋值
ListTraverse(La);//遍历链表
ListInsert(&La, 3, 100);//第三个位置插入100
ListTraverse(La);//遍历链表
ListDelete(&La,5,&x);//删除第五个元素,用x返回
ListTraverse(La);//遍历链表 DestroyList(&La);//销毁链表
} 这是我们刚学的,保证简洁准确
#include"stdafxh"
#include "stdioh"
typedef struct node{
int data;
struct node next;
}node;
void main()
{
node create(){
node head,p,q;
q = head;
int i=0;
int x;
head=(node )malloc(sizeof(node));
while(1)
{
printf("please input the node:");
scanf("%d",&x);
if(x==0) {break;}
p=(node )malloc(sizeof(node));
p->data=x;
if(++i==1)
{
head->next=p;
}
else
{
q->next=p;
}
q=p;
}
q->next=NULL;
return head;
}
node search(node head,int pos)
{
node p;
int len=length(head);
p=head->next;
if(pos<0) {
printf("incorrect position!\n"); return NULL;
}
else if(pos>len)
{
printf("incorrect position!\n"); return NULL;
}
else if(pos==0) {
return head;
}
if(p==NULL) {
printf("the link is empty!\n"); return NULL;
}
while (--pos)
{ p=p->next; }
return p;
}
node insert(node head,int pos,int x)
{
node p,q=NULL;
q=(node )malloc(sizeof(node));
q->data=x;
if(pos==0) {
head->next=q; return head; }
p=search(head,pos);
if(p!=NULL) { q->next=p->next; p->next=q; }
return head;
}
}
// DLinkcpp : 定义控制台应用程序的入口点。
//
#include "stdafxh"
#include "malloch"
typedef struct LNode
{
int data;
struct LNode next;
}Dlink;
int _tmain(int argc, _TCHAR argv[])
{
Dlink l,s1;
Dlink s=(Dlink )malloc(sizeof(Dlink));
l=s;
for(int i=0;i<5;i++)
{
s->data=i+1;
s1=(Dlink )malloc(sizeof(Dlink));
s->next=s1;
s=s1;
}
s->next=NULL;
//数据就保存到以l为头结点的链表中了
return 0;
}
扩展资料:
对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。
其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。
由分别表示,,,的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表。
int main()
{
Link head; //链表(不带头节点)
int n;
printf("输入链表的长度n: ");
scanf("%d",&n);
printf("连续输入%d个数据(以空格隔开): ",n);
head=CreateLink(n);
printf("\n原本链表的节点是: ");
DispLink(head);
LinkSort(head);
printf("\n从大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
链表的具体存储表示为:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
-单链表
这是个很简单的链表创建和输出
#include<stdioh>
#include<stdlibh>
typedef struct linkednode
{
char data;
struct linkednode next;
}node,link_list;//链表节点的结构及重命名
link_list creat()//创建一个链表返回类型是链表的首地址
{
link_list L;
node p1,p2;
char data;
L=(node)malloc(sizeof(node));//开辟存储空间
p2=L;
while((data=getchar())!='\n')//输入回车键时结束输入
{
p1=(node)malloc(sizeof(node));
p1->data=data;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return L;
}
void print(link_list L)//把链表输出
{
node p;
p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
link_list L=NULL;
char x;
printf("请输入链表节点:\n");
L=creat();
print(L);
}
C语言单向链表的创建,输入,插入和删除的实现
本文2023-11-06 05:28:57发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/419540.html