请用c语言创建一个带头节点的单链表,实现输入数据,删除,插入的基本功能

如题所述

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
int date;
struct Node * pNext;
}NODE, *PNODE;

//函数声明
PNODE  creat_list();//创建链表 
void traverse_list(PNODE pHead); //输出链表
void Insert(PNODE pHead,int pos,int e); //pos 为插入位置 e为插入的数据
void Delete(PNODE pHead,int pos,int *e);
                //pos 为删除链表第pos个数 e存放被删除的数据


int main()
{    

int e;
PNODE pHead = NULL;
pHead = creat_list();
traverse_list(pHead);
Insert(pHead,2,99);
traverse_list(pHead);
Delete(pHead,3,&e);
printf("被删除的数据为 %d\n",e);
traverse_list(pHead);

return 0;
}

PNODE creat_list()
{
int len;//用来存放有效结点的个数
int i;
int val;//用来临时存放有效结点的数据 


PNODE pHead = (PNODE)malloc(sizeof(NODE));
//创建一个不存放数据的结点,pHead 为头指针

if (pHead == NULL)
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}

PNODE pTail = pHead;
pTail->pNext = NULL;

printf("请输入你需要生成的链表的个数:len = ");
scanf("%d",&len);

for (i = 0; i < len; i++)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));
           //当i = 0 时,创建的第一个结点是首结 每创建一个新结点
if (pNew == NULL)
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}
pNew->date = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}

void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while(NULL != p)
{
printf("%d ",p->date);
p = p->pNext;
}
printf("\n");
return;
}

void Insert(PNODE pHead,int pos,int e)
{
int j = 0;
PNODE p, s;
p = pHead;
while(p && j < pos - 1)
{
p = p->pNext;
j++;
}
if(!p || j > pos - 1)
exit(-1);
s = (PNODE)malloc(sizeof(NODE));
s->date = e;
s->pNext = p->pNext;
p->pNext = s;
}

void Delete(PNODE pHead,int pos,int *e)
{
int j = 0;
PNODE p, r;
p = pHead;
while(p && j < pos - 1)
{
p = p->pNext;
j++;
}
if(!p->pNext || j > pos - 1)
exit(-1);
r = p->pNext;
p->pNext = r->pNext;
*e = r->date;
free(r);
}

追问

谢谢

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-04-28
我来了追答

还在吗?

我这里有差不多的程序

可以发你哦

嘎嘎

追问

好啊

那发吧

用C语言头插法或尾插法建立带头结点的单链表,实现单链表上的插入,删除...
int ListLength(LinkList L){ int i=0;LinkList p=L->next; \/* p指向第一个结点 *\/ while(p){ i++;p=p->next;} return i;} \/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) *\/ \/* 操作结果:用e返回L中第i个数据元素的值 *\/ Status GetElem(LinkList L,int i,...

如何用C语言创建一个链表,实现增、删、改、查?
}NODE;\/\/1、写出建立一个带头结点的线性链表的函数,其中每个结点包括学号、姓名、分数三个数据域。函数形式如下:NODE *creat_link(int direction){ NODE *head,*p,*tail;int xh,i=1;if(direction==1) \/\/当direction的值为1时,新建立的结点连到尾部 { tail=head=(NODE *)malloc(sizeof(...

c语言 链表操作:建立,显示及节点的插入,删除
return 1;} void CreateList_L(LinkList &L, int n) \/\/ 算法2.11 { \/\/ 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L LinkList p;int i;L = (LinkList)malloc(sizeof(LNode));L->next = NULL; \/\/ 先建立一个带头结点的单链表 for (i=n; i>0; --...

编程完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值...
return 0;q=p->next;p->next=q->next;e=q->a;free(q);} void main(){ int e,i,n;List l1;struct node *p;printf("请输入要创建链表的大小:\\n");scanf("%d",&n);printf("请向链表中输入%d个整型数据:\\n",n);createList(l1,n);printf("当前链表为:\\n");...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
int data;\/\/链表数据 struct LNode* next;\/\/链表指针 }LNode,*LinkList;\/*头插法-建立单链表*\/ LinkList HeadCreate(LinkList la){ int num;la=(LinkList)malloc(sizeof(LNode));\/\/建立头结点 la->next=NULL;scanf("%d",&num);while(num!=10){ LNode *p=(LinkList)malloc(sizeof(...

怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操...
\/\/构造链表 void Create_Linklist(linklist &L){ linklist p;p=(linklist)malloc(sizeof(LNode));if(!p)exit(OVERFLOW);L=p;L->next =NULL;} \/\/节点插入 void Insert_Linklist(linklist &L){ linklist p;int n,i;printf("请输入插入节点的个数n: ");scanf("%d",&n);getchar()...

C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置_百度知 ...
功能:C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置 \/ include"stdio.h"include"stdlib.h"include"malloc.h"\/*假设输入的数据为3个--我比较好操作-_-*\/ define size 3 typedef struct List { int num;int shuju;struct List *next;}list;\/*头结点*\/ list *setup_list(list...

用C语言创建一个顺序表并完成插入等操作
char a[],int n) { \/\/建立顺序表int i;for(i = 0;i < n;i++) L->data[i] = a[i];L->length = n;}bool listinsert(sqlist *&L,int i,char e) { \/\/插入数据元素int j;if(i < 1 || i > L->length + 1) return false;i--;for(j = L->length;j > i;j--)...

...内容是建立一个链表,还有链表的插入与删除。
int listdelete(linklist &l,int i)\/\/在带头节点的单链表中删除第i个元素e,并返回其值 { int j=0;linklist p;p=new lnode;p=l;while(p->next&&jnext;++j;} if(!(p->next)||j>i-1){return 0;} linklist q;q=new lnode;q=p->next;p->next=q->next;m=q->data;free(q...

用C语言编写程序:建立一个带头结点的线性链表,用以存放输入的二进制...
请注意:C语言无法输入二进制数,所以我用十进制数输入,但是我把输入的数做为二进制数,你注意输入的数不要太大。include <stdio.h> include <stdlib.h> \/* 链表结点 *\/ typedef struct _Node { struct _Node *next; \/* 指向下一个结点 *\/ unsigned char bit; \/* 当前结点所代表的二...

相似回答