线性表的基本操作(C语言实现)
文章目录
这里使用的工具是DEV C++
可以借鉴一下
实现效果顺序存储代码实现链式存储存储实现
这里使用的工具是DEV C++
可以借鉴一下
一、实训名称 线性表的基本操作
二、实训目的 1.掌握线性表的基本概念 2.掌握线性表的存储结构(顺序存储与链式存储) 3.掌握线性表的基本操作
三、实训要求 1.线性表可以顺序表也可以用单链表实现,鼓励大家用两种方式实现。 2.创建线性表时,数据从键盘输入整形数据 3.线性表类型定义和或各种操作的实现,可以用教材给出的方法,也可以自己设计。
实现效果
顺序存储代码实现
源码
#include#include#define MAX 20#define LISTINCREMENT 10typedef struct{ int *elem; int length; int listsize;}sqlist; void Creatlist(sqlist &L){ //创建一个线性表 L.elem=(int *)malloc(MAX*sizeof(int)) ; if(!L.elem)return ; L.listsize=MAX; printf("输入表的长度:"); scanf("%d",&L.length); printf("输入%d的个数:",L.length); for(int i=0;iL.length+1)return;// 1<=i<=listlength(L)+1;int *p,*q;q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e; ++L.length; return; } int listdelete(sqlist &L){ //删除元素 int i,e; printf("输入要删除的元素\n"); scanf("%d",&e); i=makesureElem(L,e); if((i<1)||(i>L.length))return 0; else{ int *p,*q; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移 -L.length; printf("元素被删除!"); } return 0; } int main(){ sqlist L;Creatlist(L); Traverse(L); LocateElem(L,1); Listinsert(L); Traverse(L);; listdelete(L); Traverse(L); return 0;}
链式存储存储实现
源码
#include #include #include struct danlianbiao_Node{int data;struct danlianbiao_Node *next;};//base的结构体 struct danlianbiao{int length;struct danlianbiao_Node *base;}; struct danlianbiao *danlianbiao_init(); void danlianbiao_free(struct danlianbiao *list); //清除 void danlianbiao_clear(struct danlianbiao *list); int danlianbiao_length(struct danlianbiao *list); //添加 void danlianbiao_add(struct danlianbiao *list,int index,int value); void danlianbiao_remove(struct danlianbiao *list,int index); //修改 void danlianbiao_set(struct danlianbiao *list,int index,int value); int danlianbiao_get(struct danlianbiao *list,int index ); //查询 int danlianbiao_lookup(struct danlianbiao *list,int value);int danlianbiao_isempty(struct danlianbiao *list,int value);void menu(){ printf("********目录*******\n"); printf("输出单链表中的各元素值1\n"); printf("在单链表中插入数据元素2\n"); printf("在单链表中插入数据元素3\n"); printf("寻找单链表中某一个数值4\n"); printf("结束程序 0\n"); printf("**********************************\n"); }int main(int argc, char *argv[]) { int n,m,i,e; printf("请输入元素的个数 :"); scanf("%d",&n); printf("以此输入%d个数据元素 :",n); menu(); printf("输入你的选择:"); scanf("%d",&m); switch(m) { case 1: printf("现在链表的元素为:"); break; case 2: printf("依次输入插入位置和数据元素(空格隔开):"); scanf("%d %d",&i,&e); } return 0;} struct danlianbiao *danlianbiao_init(){ struct danlianbiao *list=NULL; list=( struct danlianbiao *)malloc(sizeof( struct danlianbiao )); list->base=(struct danlianbiao_Node *)malloc(sizeof(struct danlianbiao_Node)); list->base->data=-1; list->base->next=NULL; list->length=0; return list; } void danlianbiao_free(struct danlianbiao *list){ struct danlianbiao_Node *pnode=NULL;//可能出现问题指针 while(list->base!=NULL){ pnode=list->base; list->base=pnode->next; free(pnode); }//while free(list); } //清除 void danlianbiao_clear(struct danlianbiao *list){ struct danlianbiao_Node *next=NULL;//可能出现问题指针 struct danlianbiao_Node *pnode=NULL; while(list->base->next!=NULL){ next=list->base->next; list->base->next=next->next; free(pnode); }//while list->length=0; } //获得单链表的长度 int danlianbiao_length(struct danlianbiao *list){ } //添加 ,该函数没有错误 void danlianbiao_add(struct danlianbiao *list,int index,int value){ int i=0; struct danlianbiao_Node *pnode=NULL; struct danlianbiao_Node *p=NULL; p=(struct danlianbiao_Node *)malloc(sizeof(struct danlianbiao_Node )); p->data=value; pnode=list->base; while(inext; i++; }//while p->next=pnode->next; pnode->next=p; list->length++; } // //移除这一项没有错误 void danlianbiao_remove(struct danlianbiao *list,int index){ struct danlianbiao_Node *pnode=NULL; struct danlianbiao_Node *p=NULL; p=(struct danlianbiao_Node *)malloc(sizeof(struct danlianbiao_Node )); //有错误 int value;int i; p->data=value; pnode=list->base; while(inext; i++; } p=pnode->next; pnode->next=p->next; free(p); } //设置值 ,这一项没有错误 void danlianbiao_set(struct danlianbiao *list,int index,int value){ int i=0; struct danlianbiao_Node *pnode=NULL; struct danlianbiao_Node *p=NULL; p=(struct danlianbiao_Node *)malloc(sizeof(struct danlianbiao_Node )); p->data=value; pnode=list->base; while(inext; i++; }//while pnode->data=value; } //得到一个数值函数方法没有错误 int danlianbiao_get(struct danlianbiao *list,int index ){ int i=0; int value; struct danlianbiao_Node *pnode=NULL; struct danlianbiao_Node *p=NULL; p=(struct danlianbiao_Node *)malloc(sizeof(struct danlianbiao_Node )); p->data=value; pnode=list->base; while(inext; i++; }//while return( pnode->data); } // int danlianbiao_lookup(struct danlianbiao *list,int value){ int i=0; struct danlianbiao_Node *pnode=NULL; for(pnode=list->base->next;pnode !=NULL;pnode=pnode->next){ i++; if(pnode->data==value) { return i; }//if }//for return 0; }int danlianbiao_isempty(struct danlianbiao *list,int value){}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~